4

我有一个表单(Spring 3 MVC 项目),我正在使用 DTO(数据传输对象)进行数据验证。数据被发送到控制器,我正在使用BindingResult.hasErrors()方法和适当的注释检查它的有效性。我将在这里进行简化,因为我遇到了数字字段的问题。

DTO:

public class Item {

    private String discount;

    @Digits(integer = 15, fraction = 2)
    public String getDiscount() {
        return discount;
    }

}

如果我提交的表单中没有任何内容discountBindingResult.hasErrors()将返回 true 并返回消息

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

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

4

2 回答 2

5

您需要做的是配置 Spring 将空 String转换为nullStringTrimmerEditor您可以通过在 FormControllerinitBinder方法中注册 a 来实现:

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

StringTrimmer 编辑器

然后按照 parsifal 的规定,@Digitsnull值视为有效值。

于 2013-01-08T14:58:41.553 回答
-1

您可以创建自定义验证注释。可以在 spring 文档中找到解释:http : //static.springsource.org/spring/docs/3.0.0.RC3/reference/html/ch05s07.html,par 5.7.2.2

于 2013-01-08T14:08:31.077 回答