Czy domyślny konstruktor bez argumentów jest obowiązkowy dla Gsona?
Podręcznik użytkownika Gson stwierdza, że powinniśmy zdefiniować domyślny konstruktor bez argumentów dla każdej klasy, aby poprawnie współpracować z Gsonem. Jeszcze więcej wjavadoc w sprawie GsonaInstanceCreator
klasa powiedziała, że wyjątek zostanie zgłoszony, jeśli spróbujemy deserializować instancję klasy brakującego konstruktora domyślnego i mypowinien posługiwać sięInstanceCreator
w takich sprawach. Próbowałem jednak przetestować użycie Gsona z klasą pozbawioną domyślnego konstruktora, a zarówno serializacja, jak i deserializacja działają bez żadnych problemów.
Oto fragment kodu do deserializacji. Klasa bez konstruktora niebędącego argumentem:
public class Mushroom {
private String name;
private double diameter;
public Mushroom(String name, double diameter) {
this.name = name;
this.diameter = diameter;
}
//equals(), hashCode(), etc.
}
i test:
@Test
public void deserializeMushroom() {
assertEquals(
new Mushroom("Fly agaric", 4.0),
new Gson().fromJson(
"{name:\"Fly agaric\", diameter:4.0}", Mushroom.class));
}
co działa dobrze.
Więc moje pytanie brzmi:czy mogę rzeczywiście korzystać z Gsona bez konieczności posiadania domyślnego konstruktora lub czy istnieją okoliczności, w których nie będzie działać?