2014-01-14 18 views
2

我们使用Spring MVC,Jackson for json,Hibernate ORM。我们需要添加前端验证。我遇到了Hibernate验证器。hibernate验证器,json模式生成和使用常见约束条件

我们有一组使用JPA注释的Domain类[DO类]。 我们有另一套为Json绑定注解的POJO类[DTO类]。

我们要实现基础设施,执行以下操作:

  1. DTO类指DO类约束[适用],这样的事实是同一个地方。
  2. 再次通过重用JPA批注生成json模式。
  3. 验证其余呼叫的输入。

例如,不要使用以下:

PersonDTO{ 
    @NotNull 
    @Size(min=2, max=60) 
    private String firstName; 
} 

如何:

PersonDTO{ 
    @MapsTo(com.xyz.domain.PersonDO.firstName.Size) // referring to the JPA annotation 
    private String firstName; 
} 

,然后自定义验证数字出来的约束通过查看JPA注释坚持。

我列出的策略是一种典型的方法吗?任何反馈或意见表示赞赏。你能指点我相关的任何文章? 谢谢。

回答

0

在Hibernate Validator中,不存在用于将约束从一个模型复制到另一个模型的开箱即用功能,但您可以使用现有的API自己实现它。

更具体地说,在运行时为您的类型提供了一个用于retrieving constraint metadata(由Bean验证标准化)的API和一个用于dynamically putting constraints的API(由Hibernate Validator提供)。您可以使用前者来读取您的领域模型的约束,并使用后者来驱动在DTO模型上创建等效约束。为此,您当然需要一种策略来匹配源模型和目标模型的相应类型和属性。

+0

谢谢你Gunnar。指针是有帮助的。我已经实现了动态添加约束的逻辑。我使用了下面的代码片段,但是,实际的验证没有看到我添加的约束条件。我认为应用程序通过spring bean的hibernate validator配置与我增强的不同。如何通过LocalValidatorFactoryBean将约束添加到Spring使用的配置中?谢谢你的帮助。 – user19937

+0

HibernateValidatorConfiguration配置= Validation.byProvider(HibernateValidator.class).configure(); ConstraintMapping m = configuration.createConstraintMapping(); (Class c:dtoClasses){ addConstraintsToClass(c,m,handled); } Validator validator = configuration.addMapping(m).buildValidatorFactory()。getValidator(); – user19937

+0

我不确定这是否可能与LocalValidatorFactoryBean。您可以禁用它,而是注册您的自定义配置的Validator bean。 – Gunnar