我正在尝试构建一个像这样的控制器:

@RequestMapping(method = {RequestMethod.GET}, value = "/users/detail/activities.do")
public View foo(@RequestParam(value = "userCash", defaultValue="0.0") Double userCash)
{
    System.out.println("foo userCash=" + userCash);
}


这工作正常:

http://localhost/app/users/detail/activities.do?userCash=123&

但是在此情况下,userCash == null尽管具有默认值

http://localhost/app/users/detail/activities.do?userCash=&

通过一些挖掘,似乎第一个编辑器绑定的b / c如下所示:

binder.registerCustomEditor(Double.class, new CustomNumberEditor(Double.class, false));


问题在于第二个参数(即false)定义了是否允许空白值。如果我将其设置为true,则系统将认为空白输入有效,因此我得到一个null的Double类。

如果我将其设置为false,那么系统将在空白输入字符串上阻塞:


org.springframework.beans.TypeMismatchException:
无法转换类型的值
'java.lang.String'为必需的类型
'双';嵌套异常为
java.lang.NumberFormatException:空



有谁知道如何让defaultValue适用于Doubles?

最佳答案

可能您必须使用自己的CustomEditor来实现转换逻辑。

从请求的角度来看,类似/activities.do?userCash=&的url表示userCash参数实际上是一个空字符串或空字符串(因此会出现错误)。

09-08 11:48