当 ObjectMapper 不可用时,在自定义 StdDeserializer 中将 JsonNode 转换为 POJO

mrd*_*iri 4 java json jackson

我想要实现的是将 a 转换JsonNode为自定义反序列化器内的 POJO (即反序列化它)。

大多数其他答案(例如此处的这个答案)建议使用ObjectMapper,但该deserialize方法具体没有对象映射器,因此该解决方案不起作用。因此,这个问题不是重复的。

这是我的自定义解串器:

class AccountDeserializer extends StdDeserializer<Input> {
    public AccountDeserializer() {
        this(null);
    }

    public AccountDeserializer(Class<?> vc) {
        super(vc);
    }

    @Override
    public Account deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
        JsonNode root = jp.getCodec().readTree(jp);
        User user = root.get("user").????;

        // other statements

        Account acc = new Account(user);
        return acc;
    }
}
Run Code Online (Sandbox Code Playgroud)

User是一个简单的类)

Dru*_*les 6

您可以像这样使用ObjectCodecin :JsonParser

jp.getCodec().treeToValue(root.get("user"), User.class)
Run Code Online (Sandbox Code Playgroud)

User这将根据任何其他现有的序列化规则返回您的对象。

感谢 @galcyurio 在Convert JsonNode into POJO中的评论:

您还可以在 StdDeserializer 中使用此方法:p.codec.treeToValue