Gson user guide은 모든 클래스가 Gson과 제대로 작동하도록 기본 no-args 생성자를 정의해야한다고 말합니다. 심지어 Gson의 InstanceCreator
클래스에있는 javadoc 클래스에서 기본 누락 된 클래스 생성자가없는 인스턴스를 deserialize하려고하면 예외가 발생하고 은이어야합니다. InstanceCreator
을 사용해야합니다. 그러나, 나는 기본 생성자가없는 클래스와 함께 Gson을 사용하여 테스트 해 보았고, 직렬화와 비 직렬화 작업은 문제없이 수행되었다.Gson에게는 기본 no-args 생성자가 필수입니까?
다음은 deserializaiton 코드입니다. 비 인수 생성자가없는 클래스 :
public class Mushroom {
private String name;
private double diameter;
public Mushroom(String name, double diameter) {
this.name = name;
this.diameter = diameter;
}
//equals(), hashCode(), etc.
}
및 테스트 : 잘 작동
@Test
public void deserializeMushroom() {
assertEquals(
new Mushroom("Fly agaric", 4.0),
new Gson().fromJson(
"{name:\"Fly agaric\", diameter:4.0}", Mushroom.class));
}
.
제 질문은 : 기본 생성자가 없어도 Gson을 실제로 사용할 수 있습니까? 아니면 작동하지 않을 상황이 있습니까?
최종 구성원을 null로 설정하는 기본 생성자가 있지만이 구성원에 대한 설정자가없는 경우 어떻게됩니까? 그게 합리적인 해결책입니까? –
@ thomas.mc.work Gson은 리플렉션 (그리고 잠재적으로 안전하지 않은 작업)을 통해 필드를 직접 설정할 수 있으며 getter (또는 직접 필드를 통해 검색 할 수 있습니다.이 디자인은 권장하지 않습니다.) –
I '여기에 설명되어있는 라이브러리 잭슨의'최종 '문제에 대한 좋은 해결책을 찾았습니다. http://stackoverflow.com/a/11838468/2854723 –