Wie Deserialisieren eine leere JSON-string mit dem Wert null für java.lang.String?
Ich versuche eine einfache JSON-de-serialisieren im java-Objekt. Ich bin aber immer leer String Werte für java.lang.String
Immobilien-Werte. Im rest der Eigenschaften leere Werte zu konvertieren null Werte(was will ich).
Mein JSON und die zugehörigen Java-Klasse, die unten aufgelistet sind.
JSON-string:
{
"eventId" : 1,
"title" : "sample event",
"location" : ""
}
EventBean Klasse POJO:
public class EventBean {
public Long eventId;
public String title;
public String location;
}
Meine main class code:
ObjectMapper mapper = new ObjectMapper();
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
mapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
try {
File file = new File(JsonTest.class.getClassLoader().getResource("event.txt").getFile());
JsonNode root = mapper.readTree(file);
//find out the applicationId
EventBean e = mapper.treeToValue(root, EventBean.class);
System.out.println("It is " + e.location);
}
Ich hatte erwartet, print "Es ist null". Stattdessen bin ich immer "Es ist ". Offensichtlich Jackson ist nicht die Behandlung von leeren String-Werten als NULL, während die Umwandlung zu meinem String Objekt-Typ.
Ich habe irgendwo gelesen, dass es erwartet wird. Dies ist jedoch etwas, was ich vermeiden will, für java.lang.String zu. Gibt es eine einfache Möglichkeit?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Jackson geben Sie null für andere Objekte, aber für die Zeichenfolge wird es geben leeren String.
Aber Sie können eine Benutzerdefinierte
JsonDeserializer
um dies zu tun:In der Klasse, die Sie haben, um es zum Feld "Speicherort" ein:
Ist es möglich, definieren Sie eine benutzerdefinierte deserializer für den String-Typ, das überschreiben der standard-String-deserializer:
Diese Weise alle String-Felder die gleiche Weise Verhalten wird.
Könnten Sie das zunächst gerne sehen, wenn es irgendwelche Fortschritte auf die Github-issue ersuchenden genau dieses feature.
Für diejenigen, die mit Spring Boot: Die Antwort von jgesser war sehr hilfreich für mich, aber ich habe eine Weile versucht, herauszufinden, der beste Weg, es zu konfigurieren in den Frühling Starten.
Eigentlich die Dokumentation sagt:
So, hier ist jgesser Antwort erweitert, in sowas kann man kopieren-einfügen in eine neue Klasse, in eine Spring-Boot-Anwendung