2015-06-20 43 views
7

Używam Resteasy w połączeniu z Google Guice za pomocą Resteasy-Guice. Szukałem sposobów, aby zatwierdzić moje organy wniosku. Chcę to zrobić na przykład:Jaki jest właściwy sposób sprawdzania poprawności żądań przy użyciu programu Resteasy?

public static class MyPojo { 

    @NotEmpty private String contents; 

} 

a następnie użyć w moim zasobem

@POST 
@ValidateRequest 
public void doPost(@Valid MyPojo myPojo) { 
    // use myPojo only if valid 
} 

pracuję z resteasy-hibernate-validator-operatora. Ale odkąd zmieniłem na nowsze wersje, wprowadziło to (niechciane?) Zależność do EJB. Zobacz także: RESTEASY-1056. W komentarzach jest powiedziane, że należy przełączyć się do nowszej validator-11 zamiast:

przełącznik do resteasy-validator-provider-11, który implementuje nowszą Bean Validation 1.1 specyfikacji.

docs powiedzieć:

Walidacja jest domyślnie włączona (zakładając resteasy-validator-dostawca-JAR-11 jest dostępny), choć parametr i walidacja zwracana wartość może być wyłączone lub zmodyfikowane w pliku konfiguracyjnym validation.xml. Szczegółowe informacje można znaleźć w dokumentacji programu Hibernate Validator.

ja jednak nie udało się uzyskać tej pracy do mojej konfiguracji, ponieważ znalazłem się w tym zależnościami jak hibernate-validator, javax.el-api, javax.el i hibernate-validator-cdi i adnotacje jak ValidateOnExecution. Nie znajduję jednak żadnej z tych instancji, które są odrzucane lub odrzucane są nieprawidłowe żądania.

Jaki jest preferowany, lekki i działający sposób na sprawdzenie poprawności za pomocą programu Resteasy?

Odpowiedz

3
  • przypadkowo miał przechodni zależność do hibernate-validator-provider który spowodował poprzednia stara się niepowodzeniem. Upewnij się, że nie masz przejściowej zależności od hibernate-validator-provider. Dla mnie spowodowało to następujący wyjątek: issues.jboss.org/browse/RESTEASY-826.
  • Na podstawie Thomasa answer dodałem zależności do javax.validation, resteasy-validator-provider-11, hibernate-validator.
  • Następnie nadal otrzymywałem wyjątki (java.lang.NoClassDefFoundError: javax/el/PropertyNotFoundException). Na podstawie odpowiedzi this dodałem javax.el-api i el-impl jako zależności. Myślę, że to dlatego, że używam wbudowanego kontenera serwletu.
  • musiałem wyjąć @ValidateOnRequest adnotacji na zasobach, nie są już konieczne

Ostateczna konfiguracja robocza:

<dependency> 
     <groupId>javax.validation</groupId> 
     <artifactId>validation-api</artifactId> 
     <version>1.1.0.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-validator-provider-11</artifactId> 
     <version>3.0.11.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>5.0.1.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.el</groupId> 
     <artifactId>javax.el-api</artifactId> 
     <version>3.0.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.web</groupId> 
     <artifactId>el-impl</artifactId> 
     <version>2.2</version> 
    </dependency> 
4

Nie trzeba podawać adnotacji do samego zasobu ani wykonywać dodatkowej konfiguracji. Wystarczy adnotacje ograniczające na POJO, aby działało.

Moja konfiguracja wygląda następująco:

Sposób zasób:

@POST 
public void doPost(@Valid MyPojo myPojo) { 
    // use myPojo only if valid 
} 

POJO:

public static class MyPojo { 
    @NotEmpty private String contents; 
} 

Testowane z następujących zależności:

javax.validation wersja 1.1.0.Final

resteasy-validator-provider-11 wersja 3.0.11.Final

hibernate-validator wersja 5.0.0.Final i 5.0.1.Final

+0

Usunąłem wszystkie zależności walidacji, a następnie dodaje je z tej samej wersji. Teraz jednak natrafiłem na następujący problem: https://issues.jboss.org/browse/RESTEASY-826 –