Jackson의 사용자 지정 deserializer에 문제가 있습니다. 기본 직렬 변환기에 액세스하여 역 직렬화중인 개체를 채우고 싶습니다. 채우기 후에 몇 가지 사용자 지정 작업을 수행하지만 먼저 기본 Jackson 동작으로 개체를 역 직렬화하려고합니다.
이것이 제가 현재 가지고있는 코드입니다.
public class UserEventDeserializer extends StdDeserializer<User> {
private static final long serialVersionUID = 7923585097068641765L;
public UserEventDeserializer() {
super(User.class);
}
@Override
@Transactional
public User deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
ObjectCodec oc = jp.getCodec();
JsonNode node = oc.readTree(jp);
User deserializedUser = null;
deserializedUser = super.deserialize(jp, ctxt, new User());
// The previous line generates an exception java.lang.UnsupportedOperationException
// Because there is no implementation of the deserializer.
// I want a way to access the default spring deserializer for my User class.
// How can I do that?
//Special logic
return deserializedUser;
}
}
필요한 것은 기본 디시리얼라이저를 초기화하여 특수 로직을 시작하기 전에 POJO를 미리 채울 수있는 방법입니다.
사용자 지정 deserializer 내에서 deserialize를 호출 할 때 serializer 클래스를 구성하는 방법에 관계없이 현재 컨텍스트에서 메서드가 호출되는 것 같습니다. 내 POJO의 주석 때문입니다. 이로 인해 명백한 이유로 스택 오버플로 예외가 발생합니다.
나는 초기화를 시도 BeanDeserializer
했지만 프로세스가 매우 복잡하고 올바른 방법을 찾지 못했습니다. 또한 AnnotationIntrospector
.NET 파일의 주석을 무시하는 데 도움이 될 수 있다고 생각하면서을 (를) 사용하지 않도록 오버로드 해 보았습니다 DeserializerContext
. 마지막으로 JsonDeserializerBuilders
Spring에서 응용 프로그램 컨텍스트를 확보하기 위해 몇 가지 마법 작업을 수행해야했지만 성공했을 수도 있습니다 . 예를 들어 JsonDeserializer
주석 을 읽지 않고 역 직렬화 컨텍스트를 구성하는 방법과 같이 더 깨끗한 솔루션으로 이끌 수있는 모든 것을 감사하겠습니다 .
DeserializationContext
당신이 만들거나 변경해야 할 것이 아닙니다. 에서 제공합니다ObjectMapper
.AnnotationIntrospector
마찬가지로 액세스 권한을 얻는 데 도움이되지 않습니다.