我正在尝试构建一个像这样的控制器:
@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参数实际上是一个空字符串或空字符串(因此会出现错误)。