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ć?

questionAnswers(2)

yourAnswerToTheQuestion