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

问题描述 投票:3回答:3

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>

我使用带有Jersey的Java 8和Tomcat 8。

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

java hibernate tomcat bean-validation
3个回答
2
投票

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

为了解决这个问题,我排除了Jersey隐含的hibernate验证器:

<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>

1
投票

您是否尝试将@Valid注释添加到应该执行验证的类/字段中?

根据我的经验,由于某种原因,必须提供此注释才能执行验证。


1
投票

您似乎缺少EL实现,尝试添加此依赖项:

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.el</artifactId>
    <version>3.0.1-b09</version>
</dependency>
© www.soinside.com 2019 - 2024. All rights reserved.