Spring MVC表单验证:如何使字段可选?

Mir*_*vic 4 java validation spring 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;
    }

}
Run Code Online (Sandbox Code Playgroud)

如果我提交没有在discount字段中写入的表单,BindingResult.hasErrors()将返回true与消息

numeric value out of bounds (<15 digits>.<2 digits> expected).

我想要完成的是该discount字段可以为空,但如果在其中写入了某些内容,则它应该是由@Digits注释提供的数字格式.我怎样才能做到这一点?

Ben*_*chi 5

您需要做的是配置Spring以将空String转换为null.您可以通过StringTrimmerEditor在FormController initBinder方法中注册来实现此目的:

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}
Run Code Online (Sandbox Code Playgroud)

StringTrimmerEditor一个

然后由parsifal指定,@Digitsnull值视为valide.