我有一个JSON字符串,我想使用ObjectMapper.readValue
方法将其转换为POJO。
问题是输入的Json字符串包含我想在反序列化之前过滤掉的键。
我遇到了DelegatingDeserialization
类,根据我的理解,它允许您扩展它并覆盖deserialize
方法之一,以重构json输入,然后在链上传递它。
问题是,我试图通过在Pojo上添加@JsonDeserialize(using = CustomDelegatingDeserialization.class)
来启用这个自定义的委托反序列化器--这是示例化它的正确方法吗?
下面是我的自定义委托器的一个片段:
public static class CustomDeserializer extends DelegatingDeserializer {
public CustomDeserializer() {
super(null);
}
public CustomDeserializer(JsonDeserializer<?> defaultDeserializer) {
super(defaultDeserializer);
}
@Override
protected JsonDeserializer<?> newDelegatingInstance(JsonDeserializer<?> newDelegatee) {
return new CustomDeserializer(newDelegatee);
}
@Override
public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
return super.deserialize(restructure(p), ctxt);
}
private JsonParser restructure(JsonParser jp) throws IOException {
...
return newJsonParser;
}
}
我走的是正确的道路还是有更合适的解决方案??
谢谢你!
编辑1
另一种方法是有一个CustomJsonDeserializer extends JsonDeserializer<T>
并覆盖它的deserialize
方法,然后重构Node
并通过返回codec.treeToValue(jsonNode, Pojo.class);
来传播它,这是有意义的但是它让我进入了无限循环!知道为什么吗?
1条答案
按热度按时间fv2wmkja1#
假设你的POJO没有你想忽略的属性,你可以为你的类使用注解
@JsonIgnoreProperties(ignoreUnknown = true)
。这告诉Jeckson忽略你的POJO中没有的属性。在这里阅读更多关于如何忽略一些属性的问题:Jackson Unmarshalling JSON with Unknown Properties