반응형
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
반응형
'code' 카테고리의 다른 글
여러 파일을 비스듬히 업로드하다 (0) | 2023.03.29 |
---|---|
AngularJS에서 쿠키에 액세스하는 방법 (0) | 2023.03.29 |
Angular JS 인증을 받을 수 있고 받을 가치가 있나요? (0) | 2023.03.29 |
jQuery ajax(jsonp)는 타임아웃을 무시하고 오류 이벤트를 발생시키지 않습니다. (0) | 2023.03.29 |
반응 소품 - 다른 소품이 null이거나 비어 있는 경우 소품에서 세트가 필요합니다. (0) | 2023.03.29 |