我有一个表单(Spring 3 MVC项目),我正在使用DTO(数据传输对象)进行数据验证。数据被发送到控制器,我正在使用BindingResult.hasErrors()
方法和适当的注释检查它的有效性。我将在这里进行简化,因为我遇到了数字字段的问题。
DTO:
public class Item {
private String discount;
@Digits(integer = 15, fraction = 2)
public String getDiscount() {
return discount;
}
}
如果我提交的表单中没有任何内容写在discount
字段中,BindingResult.hasErrors()
将返回true并显示消息
numeric value out of bounds (<15 digits>.<2 digits> expected)
。
我想要实现的是discount
字段可以为空,但如果其中写有内容,则应采用@Digits
注释提供的数字格式。我怎么能这样做?
答案 0 :(得分:5)
您需要做的是配置Spring以将空字符串转换为 null 。您可以通过在FormController StringTrimmerEditor
方法中注册initBinder
来实现此目的:
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}
然后由parsifal指定,@Digits
将null
值视为valide。
答案 1 :(得分:-1)
您可以创建自定义验证注释。可以在spring文档中找到解释:http://static.springsource.org/spring/docs/3.0.0.RC3/reference/html/ch05s07.html,参见5.7.2.2