2015-01-16 10 views
13

jestem sprawdzania moich POJOs w końcowym zasobów REST w Jersey:automatycznie kaskadowe fasola-validation rekurencyjnie, @Valid adnotacja

public class Resource { 
    @POST 
    public Response post(@NotNull @Valid final POJO pojo) { 
     ... 
    } 
} 

public class POJO { 
    @NotNull 
    protected final String name; 

    @NotNull 
    @Valid 
    protected final POJOInner inner; 

    ... 
} 

public class POJOInner { 
    @Min(0) 
    protected final int limit; 

    ... 
} 

To wydaje się działać prawidłowo.

Adnotacja @Min(0) jest sprawdzana tylko wtedy, gdy pole inner ma adnotację @Valid. Nie jest właściwe dodawanie adnotacji @Valid do każdego pola, które nie jest prymitywne.

Czy istnieje sposób na potwierdzenie sprawdzania poprawności fasoli, aby automatycznie rekurencyjnie kontynuować sprawdzanie poprawności, nawet jeśli nie ma adnotacji @Valid? Chciałbym moje POJO być następujące:

public class POJO { 
    @NotNull 
    protected final String name; 

    @NotNull 
    protected final POJOInner inner; 

    ... 
} 
+0

Co fasola Runtime walidacja używasz? –

+0

Używam walidatora hibernacji. –

Odpowiedz

11

Faktycznie, zgodnie ze specyfikacją, dodając @Valid jest dokładnie w tym usecase. Ze specyfikacji JSR 303:

Oprócz obsługi sprawdzania poprawności instancji obsługiwany jest również sprawdzanie poprawności wykresów obiektów. Wynik sprawdzania poprawności wykresu jest zwracany jako jednolity zestaw naruszeń ograniczeń. Rozważ sytuację, w której komponent bean X zawiera pole typu Y. W polu adnotacji Y z adnotacją @Valid walidator sprawdzi poprawność Y (i jej właściwości) po sprawdzeniu poprawności znaku X.

...

@Valid adnotacja jest stosowana rekurencyjnie

+0

Spring nie robi tego domyślnie .. używam Spring Boot 2.0.0.BUILD-SNAPSHOT –

+2

Chociaż może to być prawda, nie wyjaśnia, czy możliwe jest uzyskanie rekurencyjnego sprawdzania poprawności bez konieczności dodawania adnotacji do wszystkich elementów, o co pyta OP ... – cen