geben Sie einen Standardwert für ein Attribut, falls der Wert null ist im json-jackson
Angenommen ich habe die Klasse also
private class Student {
private Integer x = 1000;
public Integer getX() {
return x;
}
public void setX(Integer x) {
this.x = x;
}
}
Nehmen wir nun an json ist "{x:12}"
und tun Deserialisierung dann die x
wird der Wert 12
. Aber wenn das json ist "{}"
dann wird der Wert von x = 1000
(bekommen, ist aus der default-Wert des Attributs in der Klasse).
Nun, wenn die json ist "{x:null}"
dann Wert von x wird null
aber hier auch in diesem Fall möchte ich den Wert x
zu 1000
. , Wie es über jackson. Vielen Dank im Voraus.
Ich bin Deserialisieren über unter Methode, wenn es hilft trotzdem:
objectMapper.readValue(<json string goes here>, Student.class);
- das unmarshalling Methode sollten Sie verwenden: streaming -, Baum-Modell oder Daten verbindlich?
objectMapper.readValue(<json string goes here>, Student.class);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie in der Lage zu überschreiben, der setter. Fügen Sie die
@JsonProperty(value="x")
Annotationen an die getter und setter zu lassen Jackson wissen Sie zu nutzen:Erwägen, JsonDeserializer
benutzerdefinierte deserializer:
und es ist zu verwenden:
public class Student { private Integer x = Integer.valueOf(1000); public Integer getX() { return x; } public void setX(Integer x) { if(x != null) { this.x = x; } } }
Dies funktioniert. Warum wollen Sie gehen für eine komplexe Lösung?null
undempty
Vom json-Objekt, könnten Sie dieses Problem beheben in dem setter und sagen Sie Jackson nicht für die Verwendung der Feld-Zugang, sondern mithilfe der setter für das unmarshalling.
Dies funktioniert für mich.
Test-code 1:
Ausgabe:
1000
Test-code 2:
public static void main(String[] args) throws IOException {
String s = "{}";
ObjectMapper mapper = new ObjectMapper();
Student ss = mapper.readValue(s, Student.class);
System.out.println(ss.getX());
}
Ausgabe:
1000
JsonDeserializer
hatte und Tippfehler erschweren das Leben. Die Lösung mit derif x == null
ist nicht falsch.