【问题标题】:Spring MVC form validation: how to make field optional?Spring MVC 表单验证:如何使字段可选?
【发布时间】:2012-12-22 09:18:20
【问题描述】:

我有一个表单(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 注释提供的数字格式。我该怎么做?

【问题讨论】:

  • 根据 JavaDoc,@Digits 应该接受 null 值,并且空的表单字段通常被转换为 null。我还没有验证这一点,但希望他们已经测试过这个案例。我会在没有约束的情况下运行测试,以验证我没有在现场遇到意外情况(可能是由于某些转换器作为请求堆栈的一部分运行)。
  • 无论有没有约束,我都会得到相同的结果。如果字段为空,我将得到空字符串。

标签: java spring spring-mvc validation


【解决方案1】:

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

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

StringTrimmerEditor

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-07-26
      • 2017-02-26
      • 1970-01-01
      • 2022-11-22
      • 2013-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      相关资源
      最近更新 更多