jackson이 역직렬화할 때 reflection을 활용하는 방식

jinwook han·2021년 10월 3일

jackson은 java.lang reflection 라이브러리를 사용한다.

기본 생성자가 있는 경우

→ _constructor.newInstance()를 사용하여, 생성한다. newInstance()는 기본생성자를 필요로 하므로, 이 경우 역직렬화 대상에 기본생성자를 추가하여야 한다.

@Override
public final Object call() throws Exception {
    return _constructor.newInstance();
}

기본 생성자가 없는 경우

→ _constructor.newInstance(Object[] args) 또는 _constructor.newInstance(Object arg) 등을 사용하여 생성한다.

@Override
public final Object call(Object[] args) throws Exception {
    return _constructor.newInstance(args);
}

@Override
public final Object call1(Object arg) throws Exception {
    return _constructor.newInstance(arg);
}

이 경우 @JsonCreator를 사용하여 원하는 생성자 또는 팩토리 메서드에 붙여주어야 한다.

자세한 사용방법은 주석에 나와있다.

https://fasterxml.github.io/jackson-annotations/javadoc/2.9/com/fasterxml/jackson/annotation/JsonCreator.html

결론

@JsonCreator를 사용하지 않으면, 기본 생성자를 붙여주어야 역직렬화를 할 수 있다.

참고자료:

https://github.com/FasterXML/jackson-databind/blob/5f51722d2822a6ae0189fefcbccc34dea04b8e1f/src/main/java/com/fasterxml/jackson/databind/introspect/AnnotatedConstructor.java

0개의 댓글