java - 如何在 Tomcat 8 中使用 Bean Validation 2.0 (JSR 380) 功能?

标签 java hibernate tomcat bean-validation

Bean Validation 2.0 (JSR 380) 应该能够执行以下验证:

@Valid
public class MyBean{
  private List<@NotNull String> members;
}

但是好像只是忽略了@NotNull注解。另外,@NotBlank@NotEmpty注释被忽略。

我通过 Maven 在我的类路径中有 Bean Validation 2.0 API 和引用实现:

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>2.0.1.Final</version>
</dependency>

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.15.Final</version>
</dependency>

我将 Java 8 和 Tomcat 8 与 Jersey 一起使用。

我需要配置吗 Tomcat以某种方式使用 2.0 实现而不是 JDK 8 中捆绑的默认实现(比如在 Optional<> 中启用 Jackson 支持)?

最佳答案

问题的原因是 Jersey 的 Bean 验证扩展隐式地带来了旧版本的 Hibernate validator ,而我在 pom.xml 中明确请求的 Hibernate validator 没有被使用。

为了解决它,我排除了 Jersey 隐式提取的 hibernate validator :

<dependency>
            <groupId>org.glassfish.jersey.ext</groupId>
            <artifactId>jersey-bean-validation</artifactId>
            <version>2.27</version>
            <exclusions>
                <exclusion>
                    <groupId>org.hibernate</groupId>
                    <artifactId>hibernate-validator</artifactId>
                </exclusion>
            </exclusions>
 </dependency>

添加我的 Bean Validation 版本

     <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>2.0.1.Final</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>6.0.15.Final</version>
    </dependency>

并添加了 Java EL:

    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.el</artifactId>
        <version>3.0.1-b09</version>
    </dependency>

    <dependency>
        <groupId>javax.el</groupId>
        <artifactId>javax.el-api</artifactId>
        <version>3.0.0</version>
        <scope>test</scope>
    </dependency>

关于java - 如何在 Tomcat 8 中使用 Bean Validation 2.0 (JSR 380) 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55121582/

相关文章:

java - Hibernate 和 JPA 级联类型何时使用哪一个以及在哪里

java - 当使用 json 进行实体解析时,hibernate 部分更新

eclipse - Spring找不到类,虽然类存在

java.lang.ClassCastException : In Web-DriverWait when using PageFactory with POM

Java/Scala 测试集合框架

java - Intellij 2019.1.3旗舰版无法安装maven依赖

java - 如何对项目进行更改并通过 IDE 运行它而不将其部署在服务器上

apache - Tomcat : is it safe to do a rm -r ROOT?

tomcat - web.xml里面可以引用context-param吗?

java - 方法中一次只能有一个字符串