2015-05-17 7 views
5

Ich verwende DropWizard, um REST-API zu erstellen. Aber ich verstehe nicht, wie kann ich Jackson konfigurieren, um einige Klassen von WRAP_ROOT_VALUE/UNWRAP_ROOT_VALUE Funktionen auszuschließen? Im Moment bekomme ich eine Post-Anforderung mit json Körper, der nicht Name Wurzelelement enthält:Verwenden Sie JSON-Root-Element nur für einige Klassen

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

Diese auf Java-Klasse LoginRequest Karte sollte:

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

ich auch bekommen Anfragen für einige Typen, die einschließen Wurzelelement Name:

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

Dies sollte abgebildet werden:

Um Wurzelelement zu erhalten arbeiten I schließen musste:

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

aber jetzt gilt es für alle Klassen. Dies bedeutet, dass der Server beim Auftreten einer Anmeldeanforderung einen Fehler auslöst, weil er den Namen des Stammelements erwartet.

+0

Konnten Sie das lösen? –

Antwort

0

Verwendung JsonTypeName mit JsonTypeInfo statt JsonRootName:

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

@JsonTypeName

Annotation für die Bindung logische Namen verwendet, dass die kommentierten Klasse. Wird mit JsonTypeInfo (und speziell seiner JsonTypeInfo.use() -Eigenschaft) verwendet, um die Beziehung zwischen Typnamen und -typen herzustellen.

@JsonTypeInfo

Annotation für die Konfiguration von Details verwendet, ob und wie Typinformationen mit JSON Serialisierung und Deserialisierung verwendet werden, Informationen über aktuelle Klasse von Objektinstanzen zu bewahren. Dies ist notwendigerweise für polymorphe Typen erforderlich und kann auch erforderlich sein, um abstrakte deklarierte Typen und die übereinstimmende konkrete Implementierung zu verknüpfen.

Verwandte Themen