【问题标题】:hibernate validator, json schema generation and using common constraintshibernate 验证器,json 模式生成和使用通用约束
【发布时间】:2014-01-14 18:06:45
【问题描述】:

我们使用 Spring MVC、Jackson for json、Hibernate ORM。我们需要添加前端验证。我遇到了休眠验证器。

我们有一组使用 JPA 注释的域类 [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 注释找出要支持的约束。

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

【问题讨论】:

    标签: jackson hibernate-validator


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢贡纳尔。指针很有帮助。我已经实现了动态添加约束的逻辑。我使用了以下 sn-p ,但是,实际验证没有看到我添加的约束。我认为应用程序通过 spring bean 具有的休眠验证器配置与我增强的不同。如何通过 LocalValidatorFactoryBean 将约束添加到 spring 正在使用的配置中?感谢您的帮助。
    • HibernateValidatorConfiguration 配置 = Validation.byProvider(HibernateValidator.class).configure();约束映射 m = configuration.createConstraintMapping(); for (Class c : dtoClasses) { addConstraintsToClass(c, m,handled);验证器验证器 = configuration.addMapping(m).buildValidatorFactory().getValidator();
    • 我不确定 LocalValidatorFactoryBean 是否可行。您可以禁用它,而是注册您自定义配置的验证器 bean。
    猜你喜欢
    • 2017-04-14
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    相关资源
    最近更新 更多