【问题标题】:Why is Jersey requiring me to include a bean validation dependency in my project?为什么 Jersey 要求我在我的项目中包含一个 bean 验证依赖项?
【发布时间】:2015-10-06 17:14:04
【问题描述】:

编辑:我使用的是 Jersey 2.22 和 Hibernate 4.1.4。

根据文档:

Jersey 中的 Bean 验证支持作为 扩展模块 提供,需要在您的 pom.xml 文件中明确提及(如果使用 Maven)

据我所知,这不是必需的。但是,我在我的项目中也使用了 Hibernate,这可能是一个很大的因素。

有趣的是我没有在我的 Hibernate 中使用 bean 验证,一切都是用 XML 配置的老派(映射、持久性、会话工厂等)。

每当我将来自 Jersey 捆绑包的 validation-api-1.1.0-Final.jar 包含在我的依赖项中时,就会出现此错误 org.hibernate.HibernateException: Error applying BeanValidation relational constraints

我所做的临时修复是在我的 Hibernate 配置中禁用 javax.persistence.validation.mode,一切正常。但问题是,我不想再修改我的配置了,因为这个 Hibernate 项目在我所有的项目中都使用过,我担心这个小改动可能会产生巨大的影响——我猜是偏执狂。

所以我有两个问题:

  1. 为什么 Jersey 要求我包含 bean 验证依赖项? (从某种意义上说,如果我没有,我的应用程序将继续抛出异常)
  2. 看到我没有对 Hibernate 使用 bean 验证,但打算在 Jersey 中使用 bean 验证,我最好禁用 javax.persistence.validation.mode 吗?还是最好只包含一个 bean 验证 jar?

【问题讨论】:

    标签: java hibernate validation bean-validation jersey-2.0


    【解决方案1】:

    为什么 Jersey 要求我包含 bean 验证依赖项? (从某种意义上说,如果我没有,我的应用程序将保留 抛出异常)

    我不知道为什么需要它。如果 Bean Validation 确实是可选的,那么也应该没有对 Bean Validation API 的依赖。这可能需要在泽西代码中使用一些反射。在这种情况下,也许可选意味着您不需要实际的 Bean Validation 实现。如果您可以发布删除 Bean Validation API 时获得的异常类型,这将有所帮助。

    看到我没有对 Hibernate 使用 bean 验证,但打算这样做 在泽西岛使用 bean 验证,我最好禁用 javax.persistence.validation.mode?还是最好只包括 一个 bean 验证 jar?

    Bean Validation 与 JPA 集成,这意味着如果您通过 EntityManager 使用 Hibernate ORM,如果在类路径上检测到 Bean Validation 将启用。检测是通过 Bean Validation API jar 中的一个类进行的。因此,因此,如果您添加 Bean Validation API jar,您将启用 Bean Validation(即使那里也会有异常,直到您还添加了像 Hibernate Validator 这样的 Bean Validation 提供程序)。在类路径上有 Bean Validation API 的情况下,禁用基于 JPA 的验证的方法确实是通过 javax.persistence.validation.mode 属性。

    因此,如果您想使用 Bean Validation 在 REST 级别进行验证,您将需要 Bean Validation API + 一个实现(例如 Hibernate Validator)。一旦你在类路径上有这两个东西并且你不想有基于 JPA 生命周期的验证,你需要将 javax.persistence.validation.mode 设置为 none 也是。

    【讨论】:

    • 谢谢。我为我的项目添加了一个 Hibernate Validator!
    猜你喜欢
    • 2014-05-17
    • 1970-01-01
    • 2019-03-25
    • 2015-11-06
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2020-06-01
    相关资源
    最近更新 更多