2015-05-17 9 views
5

Używam dropwizard do tworzenia REST API. Ale nie rozumiem, jak mogę skonfigurować Jacksona, aby wykluczyć niektóre klasy z funkcji WRAP_ROOT_VALUE/UNWRAP_ROOT_VALUE? Teraz mam żądania POST z ciałem json, który nie zawiera nazwę elementu głównego:Użyj elementu głównego Json tylko dla niektórych klas

{ 
    "identification": "dummyuser", 
    "password":"dummypass" 
} 

ten powinien mapowania do klasy java LoginRequest:

public class LoginRequest { 
    public String identidication; 
    public String passwrd; 
} 

ja również uzyskać żądania niektórych typów, które zawierają korzeń element name:

{ 
    "user":{ 
     "id":12345, 
     "name":"John Doe" 
    } 
} 

ten powinien być odwzorowywane:

@JsonRootName("user") 
public class User { 
    ... 
} 

Aby uzyskać element główny pracy musiałem obejmują:

environment.getObjectMapper().configure(SerializationFeature.WRAP_ROOT_VALUE, true); 
environment.getObjectMapper().configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); 

ale teraz ma ona zastosowanie do wszystkich klas. Oznacza to, że gdy tylko pojawi się żądanie logowania, serwer wyświetli błąd, ponieważ oczekuje wyświetlenia nazwy elementu głównego.

+0

Czy byłeś w stanie rozwiązać ten problem? –

Odpowiedz

0

Zastosowanie JsonTypeName z JsonTypeInfo zamiast JsonRootName:

@JsonTypeName("user") 
@JsonTypeInfo(include= JsonTypeInfo.As.WRAPPER_OBJECT,use= JsonTypeInfo.Id.NAME) 
public class User { 
    ... 
} 

@JsonTypeName

Adnotacja stosowane do wiązania nazwę logiczną, że odnotowany klasa ma. Używane z JsonTypeInfo (a konkretnie z jego właściwością JsonTypeInfo.use) do ustalenia relacji między nazwami typów i typami.

@JsonTypeInfo

Adnotacja służy do konfigurowania szczegółów, czy iw jaki typ informacji jest używana z JSON serializacji i deserializacji, aby zachować informacje o rzeczywistej klasy instancji obiektu. Jest to koniecznie dla typów polimorficznych i może być również potrzebne do powiązania zadeklarowanych typów abstrakcyjnych i dopasowania konkretnej implementacji.

Powiązane problemy