Gson user guide besagt, dass wir Standard-No-Args-Konstruktor für jede Klasse für die ordnungsgemäße Arbeit mit Gson definieren sollten. Noch mehr, in der javadoc on Gson InstanceCreator
Klasse sagte, dass eine Ausnahme ausgelöst wird, wenn wir versuchen, Instanz der Klasse fehlender Standardkonstruktor deserialize und wir solltenInstanceCreator
in solchen Fällen verwenden. Ich habe jedoch versucht, Gson mit Klasse ohne Standardkonstruktor und Serialisierung und Deserialisierung ohne Probleme zu testen.Ist der Standard-Konstruktor für No-Args für Gson obligatorisch?
Hier ist der Code für Deserialisierung. Eine Klasse ohne nicht-args Konstruktor:
public class Mushroom {
private String name;
private double diameter;
public Mushroom(String name, double diameter) {
this.name = name;
this.diameter = diameter;
}
//equals(), hashCode(), etc.
}
und ein Test:
@Test
public void deserializeMushroom() {
assertEquals(
new Mushroom("Fly agaric", 4.0),
new Gson().fromJson(
"{name:\"Fly agaric\", diameter:4.0}", Mushroom.class));
}
der gut arbeitet.
Also meine Frage ist: könnte ich tatsächlich Gson ohne Notwendigkeit, Standardkonstruktor haben oder gibt es Umstände, wenn es nicht funktioniert?
Was ist, wenn ich einen Standardkonstruktor habe, der mein letztes Mitglied auf null setzt, aber es gibt kein Set für dieses Mitglied? Ist das eine vernünftige Lösung? –
@ thomas.mc.work Gson ist in der Lage, das Feld direkt durch Reflexion (und möglicherweise einige unsichere Arbeit) zu setzen, und Sie können es durch einen Getter (oder direkt durch das Feld abrufen. Ich empfehle dieses Design nicht. –
I habe eine gute Lösung für das "final" Problem mit der hier beschriebenen Library jackson gefunden: http://stackoverflow.com/a/11838468/2854723 –