2015-12-30 15 views
9

Wsporniki sprężynowe @JsonView od wersji 4.1.Wiosna i @ JsonView z wieloma identyfikatorami

adnotacji (opatrzone @RestController) metodę sprężyna contoller jest z @JsonView że ma wiele identyfikatorów mam następujący wyjątek:

java.lang.IllegalArgumentException: @JsonView only supported for request body advice with exactly 1 class argument: org.[email protected]a566e37e 

Najwyraźniej zgodnie z JsonViewResponseBodyAdvice „s Javadoc prawdziwe są następujące:

Należy pamiętać, że pomimo, że @JsonView pozwala określić więcej niż jedną klasę na , zastosowanie w przypadku porady dotyczącej treści odpowiedzi jest obsługiwane tylko z dokładnie jeden argument klasowy. Rozważ zastosowanie interfejsu złożonego.

Podobnie podczas nanoszenia metodą jako argument sterownika (opatrzone @RequestBody) również @JsonView który ma wiele identyfikatorów; zgodnie z JsonViewRequestBodyAdvice „s Javadoc:

Należy zauważyć, że pomimo @JsonView pozwalając na więcej niż jednej klasie będzie określony, użycie przez radę prośba ciała jest obsługiwany tylko z dokładnie jednej klasy argumentu. Rozważ zastosowanie interfejsu złożonego.

Czy ktoś wie, czy naprawa jest planowana? Moja aktualna wiosenna wersja to 4.2.4.

Byłoby bardzo użyteczne tworzenie widoków json dla widoków publicznych, prywatnych (rozszerzających publicznie), podsumowań i szczegółowych (rozszerzających podsumowanie), a następnie łączenie ich w metody kontrolera!

Odpowiedz

2

Jak wyjaśniono w Jackson JsonView documentation, "tylko pojedynczy widok aktywny na serializację, ale z powodu dziedziczenia widoków, może łączyć widoki przez agregację".

Konkretnie, jeśli chcesz korzystać z obu Foo i Bar JsonViews zdefiniować interfejs FooBar które je połączyć w następujący sposób:

interface Foo {} 

interface Bar {} 

interface FooBar extends Foo, Bar {} 

Następnie można opisywać swoje pola z @JsonView(Foo.class) lub @JsonView(Bar.class) i używać @JsonView(FooBar.class) na poziomie kontrolera .

+0

Dziękuję Sebastien za komentarze, ale pytanie brzmi: możemy używać dziedziczenia (a nie agregacji). –

+0

Nie wiem, czy rozumiesz, czy mógłbyś podać mi więcej informacji na temat twojego przypadku użycia? –

Powiązane problemy