我正在反序列化一个较大的json值。JSON对象深深地嵌套在该值中,如下所示:
{
"fieldOne": "valueOne",
"fieldTwo": {
"innerField": "innerValue"
}
}
我正在使用JacksonObjectMapper
将大型json值反序列化为3rd party类。深入嵌套在该第三方类别中的是另一第三方类别:
public class DeepThirdPartyClass {
public String fieldOne;
}
不幸的是,该fieldTwo
物业丢失了。我可以创建自己的类,添加缺少的字段:
public class MyClass extends DeepThirdPartyClass {
public MySubObject fieldTwo;
}
我如何配置杰克逊,以便每当它尝试将值DeepThirdPartyClass
反序列化为时,它反而反序列化为MyClass
?
我重新设计了@ olga-khylkouskaya的解决方案以适合我的问题:
@Test
public void newDeserializer() throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule("DeepThirdPartyClass subclass override", new Version(1, 0, 0, "FINAL", "com.example", "deep-third-party-class-override"));
module.addDeserializer(DeepThirdPartyClass.class, new JsonDeserializer<DeepThirdPartyClass>() {
@Override
public DeepThirdPartyClass deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
return p.readValueAs(MyClass.class);
}
});
objectMapper.registerModule(module);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
String json = "{\n" +
" \"middle\": {\n" +
" \"fieldOne\": \"valueOne\",\n" +
" \"fieldTwo\": {\n" +
" \"fieldThree\": \"valueThree\"\n" +
" }\n" +
" }\n" +
"}\n";
ThirdPartyClass thirdPartyClass = objectMapper.readValue(json, ThirdPartyClass.class);
}
public class ThirdPartyClass {
public DeepThirdPartyClass middle;
}
public class InnerClass {
public String fieldThree;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句