Spring MVC表单验证:如何使字段可选?
问题内容:
我有一个表单(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
注释提供的数字格式。我怎样才能做到这一点?
问题答案:
您需要做的是配置Spring将 空String 转换为 null
。您可以通过StringTrimmerEditor
在FormController initBinder
方法中注册一个实现此目的:
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}
然后,按照parsifal的指定,@Digits
将null
值视为有效值。