Spring验证不遵循POJO原则

时间:2014-04-29 09:15:15

标签: java spring validation

我已阅读本指南:http://spring.io/guides/gs/validating-form-input/

我看到弹簧验证表单的方法是注释 具有验证约束的对象的属性(可以是POJO) 像@ Min,@ Max,@ Size等。

这不是用这个搞乱POJO对象的最佳方法 注释

如何在spring框架中编写用于验证表单的代码?

2 个答案:

答案 0 :(得分:2)

Spring提供了一种验证(和数据绑定)设计,不排除其中任何一种。 Spring具有Validator接口,可用于验证对象。

Validator 接口使用错误对象,以便在验证时,验证程序可以向Errors对象报告验证失败。

人POJO:

public class Person {

  private String name;
  private int age;

  // the usual getters and setters...
}

实施验证器

public class PersonValidator implements Validator {

    /**
    * This Validator validates just Person instances
    */
    public boolean supports(Class clazz) {
        return Person.class.equals(clazz);
    }

    public void validate(Object obj, Errors e) {
        ValidationUtils.rejectIfEmpty(e, "name", "name.empty");
        Person p = (Person) obj;
        if (p.getAge()  110) {
            e.rejectValue("age", "too.darn.old");
        }
    }
}

关于Validation, Data Binding in Spring Framework 3.x

的文件处理

答案 1 :(得分:0)

关于你是否应该在POJO上使用注释肯定存在争议。 我个人的意见是,如果你不打算在模块之间共享POJO,那么注释配置是完全可以接受的。

如果您希望在没有注释的情况下配置验证约束,您应该查看Hibernate Validator(Hibernate Validator是此JSR 349的参考实现)XML配置。该配置的参考是here

另请查看教程的this(稍微过时)帖子。