Как использовать функции Bean Validation 2.0 (JSR 380) в Tomcat 8? - PullRequest
3 голосов
/ 12 марта 2019

Bean Validation 2.0 (JSR 380) должен иметь возможность выполнить следующую проверку:

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

Но, похоже, он просто игнорирует аннотацию @NotNull. Также аннотации @NotBlank и @NotEmpty игнорируются.

В моем пути к классам через Maven есть API-интерфейс Bean Validation 2.0 и эталонная реализация:

<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 с Джерси.

Нужно ли как-то настраивать Tomcat для использования реализации 2.0, а не для реализации по умолчанию, которая включена в JDK 8 (например, включение поддержки Optional<> в Jackson)?

Ответы [ 3 ]

2 голосов
/ 12 марта 2019

Причиной проблемы было то, что расширение Bean Validation для Джерси неявно предоставляет старую версию валидатора Hibernate, в то время как валидатор Hibernate, который я явно запрашивал в pom.xml, не используется.

Для ее решенияЯ исключил средство проверки гибернации, которое Джерси неявно извлекает:

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

добавьте мою версию проверки бинов

     <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 голос
/ 12 марта 2019

Кажется, вам не хватает реализации EL, попробуйте добавить эту зависимость:

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.el</artifactId>
    <version>3.0.1-b09</version>
</dependency>
1 голос
/ 12 марта 2019

Вы пытались добавить аннотацию @Valid в свой класс / поле, где должна выполняться проверка?

По моему опыту, по какой-то причине эта аннотация должна присутствовать, чтобы выполнить проверку.

...