>Java >java지도 시간 >사용자 정의 Jackson Deserializer 내에서 기본 역직렬화 동작을 어떻게 활용할 수 있습니까?

사용자 정의 Jackson Deserializer 내에서 기본 역직렬화 동작을 어떻게 활용할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-03 15:44:10912검색

How Can I Leverage Default Deserialization Behavior Within a Custom Jackson Deserializer?

Jackson에서 기본 동작을 사용한 사용자 정의 역직렬화

Jackson에서 사용자 정의 역직렬 변환기를 구현할 때 기본 역직렬 변환기를 활용하여 사전에 사용자 지정 논리를 적용하기 전에 개체를 채웁니다. 이 기사에서는 사용자 정의 역직렬 변환기에서 기본 역직렬 변환기에 액세스하는 문제를 다룹니다.

이를 달성하려면 BeanDeserializerModifier를 생성하고 SimpleModule을 사용하여 등록하세요. 예는 다음과 같습니다.

public class UserEventDeserializer extends StdDeserializer<User> implements ResolvableDeserializer {

    private static final long serialVersionUID = 7923585097068641765L;

    private final JsonDeserializer<?> defaultDeserializer;

    public UserEventDeserializer(JsonDeserializer<?> defaultDeserializer) {
        super(User.class);
        this.defaultDeserializer = defaultDeserializer;
    }

    @Override
    public User deserialize(JsonParser jp, DeserializationContext ctxt)
            throws IOException, JsonProcessingException {
        User deserializedUser = (User) defaultDeserializer.deserialize(jp, ctxt);

        // Special logic

        return deserializedUser;
    }

    @Override
    public void resolve(DeserializationContext ctxt) throws JsonMappingException {
        ((ResolvableDeserializer) defaultDeserializer).resolve(ctxt);
    }

    public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
        SimpleModule module = new SimpleModule();
        module.setDeserializerModifier(new BeanDeserializerModifier() {
            @Override
            public JsonDeserializer<?> modifyDeserializer(DeserializationConfig config, BeanDescription beanDesc, JsonDeserializer<?> deserializer) {
                if (beanDesc.getBeanClass() == User.class)
                    return new UserEventDeserializer(deserializer);
                return deserializer;
            }
        });

        ObjectMapper mapper = new ObjectMapper();
        mapper.registerModule(module);
        User user = mapper.readValue(new File("test.json"), User.class);
    }
}

이 예에서는

  1. UserEventDeserializer는 StdDeserializer와 ResolvableDeserializer를 모두 확장합니다.
  2. 기본 deserializer를 생성자 인수로 사용합니다.
  3. 먼저 deserialize 방법 기본 deserializer를 사용하여 deserialize한 다음 결과 개체에 사용자 지정 논리를 적용합니다.
  4. ResolvableDeserializer를 구현하여 예외 매핑을 방지합니다.
  5. BeanDeserializerModifier는 사용자의 기본 deserializer를 사용자 지정 deserializer로 바꾸는 데 사용됩니다. .

이 모듈을 사용자 정의 역직렬화 로직인 ObjectMapper를 사용하는 동시에 다른 클래스의 기본 동작을 활용할 수 있습니다.

위 내용은 사용자 정의 Jackson Deserializer 내에서 기본 역직렬화 동작을 어떻게 활용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.