code

Jackson - 인터페이스 참조 디시리얼라이제이션의 단일 실장을 지정하려면 어떻게 해야 합니까?

starcafe 2023. 3. 29. 21:39
반응형

Jackson - 인터페이스 참조 디시리얼라이제이션의 단일 실장을 지정하려면 어떻게 해야 합니까?

JSON-Object를 잭슨과 직결 해제하고 싶습니다.대상이 인터페이스이기 때문에 어떤 구현을 사용해야 하는지 지정해야 합니다.

이 정보는 @JsonTypeInfo-Annotation을 사용하여 JSON-Object에 저장할 수 있습니다.그러나 구현은 항상 같기 때문에 소스 코드로 지정하고 싶습니다.

이게 가능합니까?

SimpleAbstractTypeResolver 사용:

ObjectMapper mapper = new ObjectMapper();

SimpleModule module = new SimpleModule("CustomModel", Version.unknownVersion());

SimpleAbstractTypeResolver resolver = new SimpleAbstractTypeResolver();
resolver.addMapping(Interface.class, Implementation.class);

module.setAbstractTypes(resolver);

mapper.registerModule(module);

인터페이스를 1개만 실장했을 경우는, 다른 어프로치가 유효합니다.

public class ClassYouWantToDeserialize {
    @JsonDeserialize(as = ImplementationClass.class)
    private InterfaceClass property;
...
}

이 질문에는 조금 전에 답변이 있었습니다만, ObjectMapper를 조정할 필요가 없고, @JsonTypeInfo 주석보다 훨씬 더 간단한 옵션도 제공하고 싶습니다.

사용할 수 있습니다.@JsonDeserialize(as = ImplementationClass.class)모든 참조가 같은 방법으로 역직렬화 됩니다.

Implementation 클래스 중 하나가 열거형인 경우,@JsonFormat(shape = JsonFormat.Shape.OBJECT)리스트에도 있습니다.

언급URL : https://stackoverflow.com/questions/12688503/jackson-how-to-specify-a-single-implementation-for-interface-referenced-deseri

반응형