如何防止json反序列化上的PatchUpdateException?

时间:2018-12-31 16:59:40

标签: java json spring jackson

我正在使用自定义desereailizer解析json。它读取JsonNode,然后由ObjectMapper从json反序列化实体。

public static class CustomDeserializer extends StdDeserializer<Custom> implements ResolvableDeserializer {
    private final JsonDeserializer<?> defaultDeserializer;
    public CustomDeserializer(JsonDeserializer<?> defaultDeserializer) {
        super(Custom.class);
        this.defaultDeserializer = defaultDeserializer;
    }

    @Override
    public Custom deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
        final ObjectNode node = jp.readValueAsTree();
        // some node structure validation
        try (final TreeTraversingParser newJsonParser = new TreeTraversingParser(node)) {
            newJsonParser.nextToken();
            return (Custom) defaultDeserializer.deserialize(newJsonParser, ctxt);
        }
    }

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

在某些请求上有效,在其他情况下

com.fasterxml.jackson.core.json.UTF8StreamJsonParser cannot be cast to com.fasterxml.jackson.databind.node.TreeTraversingParser

m.fasterxml.jackson.core.json.ReaderBasedJsonParser cannot be cast to com.fasterxml.jackson.databind.node.TreeTraversingParser

如何预防这种情况?

0 个答案:

没有答案