Eigenschaft ändern-Namen, während deserialzing Klasse zu JSON in Spring MVC
Ich versuche, Sie zu konsumieren eines rest-API-Aufruf mit Spring wie folgt:
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "Basic " + base64Creds);
HttpEntity<String> request = new HttpEntity<String>(headers);
RestTemplate restTemplate = new RestTemplate();
Item item = restTemplate.exchange(url, HttpMethod.GET, request, Item.class).getBody();
Die Antwort, die ich von der API ist in der folgenden form:
{
"item":[{
"itemname": "abc",
"qty":...
}]
}
Den Artikel Klasse besitzt folgende Felder:
Class Item{
@JsonProperty("itemname")
String name;
@JsonProperty("qty")
int quantity;
//Getter /setter methods
}
Habe ich JsonProperty Anmerkungen zu den Feldern, wie Ihre Namen unterscheiden sich von den json bekomme ich aus der API. Mit dieser, ich bin in der Lage, zu Deserialisieren der api-Antwort erfolgreich.
Jedoch, wenn ich versuche zu serialisieren der Item-Klasse wieder als json, die Feldnamen sind "itemname" und "Menge". Gibt es eine Möglichkeit, diese zu halten, wie "name" und "Menge", und noch in der Lage sein, um anzeigen der API-Antwort?
Vielen Dank im Voraus.
Ich glaube du verwechselst Serialisierung & Deserialisierung. Beim abrufen der Wert von externen Präsentation - es ist die Deserialisierung, die beim speichern im externen Präsentation - es ist die Serialisierung.
InformationsquelleAutor drunkenfist | 2015-02-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nur wollen, um die Serialisierung in verschiedenen Formen, Sie können es so machen:
}
Diese Lesen würde
"{"itemname": "abc", "qty":10 }"
und schreiben"{"name": "abc", "quantity":10 }"
.Aber es gibt einen großen Nachteil - Sie werden nicht in der Lage zu Lesen
"{"name": "abc", "quantity":10 }"
mit diesemObjectMapper
(Das ist schlimmer mögliche Lösung).Können Sie 2
ObjectMappers
und anstelle der class-Annotations verwenden Mixins in Verbindung zu konfigurieren, spezifische DeserialisierungDies ist, wie Ihr Mixin würde wie folgt Aussehen:
Hier ist, wie hinzufügen von Mixin in ObjectMapper.
Wenn Sie also Deserialisieren mit Mixin ObjectMapper und serialisieren mit standard ObjectMapper es wird kein problem sein.
Schreiben Sie benutzerdefinierte
JsonDeserialization
für Ihre Klasse.Es ist einfach Klasse mit ein paar Feldern, aber Komplexität wachsen würde, proportional, als die Anzahl der Felder wächst.
Wenn Sie wollen, zu begrenzen, interne Präsentationen, die Belichtung, die Sie verwenden können, Spring @Projektionen stackoverflow.com/questions/28447922/...
InformationsquelleAutor mavarazy