gpt4 book ai didi

java - 如何配置 Jackson ObjectMapper 将 Foo 类型的所有字段反序列化为 SubclassOfFoo 的实例?

转载 作者:行者123 更新时间:2023-11-30 07:04:23 24 4
gpt4 key购买 nike

我正在反序列化一个大的 json 值。该值深层嵌套的是一个 json 对象,如下所示:

{
"fieldOne": "valueOne",
"fieldTwo": {
"innerField": "innerValue"
}
}

我正在使用 Jackson ObjectMapper 将大型 json 值反序列化为第 3 方类。深深嵌套在该第 3 方类中的是另一个第 3 方类:

public class DeepThirdPartyClass {
public String fieldOne;
}

不幸的是缺少fieldTwo属性。我可以创建自己的类来添加缺少的字段:

public class MyClass extends DeepThirdPartyClass {
public MySubObject fieldTwo;
}

如何配置 jackson,以便每当它尝试将值反序列化为 DeepThirdPartyClass 时,它都会反序列化为 MyClass

最佳答案

当我必须过滤所有字符串值中的任何不允许的字符时,我有类似的要求。创建对象映射器:

public class CustomObjectMapper extends ObjectMapper {
public CustomObjectMapper() {
super();

SimpleModule module = new SimpleModule("HTML XSS Serializer", new Version(1, 0, 0, "FINAL", "com.crowdoptic", "web"));
module.addSerializer(String.class, new JsonHtmlXssSerializer());
module.addDeserializer(String.class, new JsonHtmlXssDeserializer());

this.registerModule(module);
}
}

public class JsonHtmlXssDeserializer extends StdScalarDeserializer<String> {
private static final Logger LOG = LogManager.getLogger(JsonHtmlXssDeserializer.class);

public JsonHtmlXssDeserializer() { super(String.class); }

@Override
public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
String value = StringDeserializer.instance.deserialize(p, ctxt);
LOG.trace("in deserialize for value: " + value);
String encodedValue = StringEscapeUtils.escapeHtml4(value);
return encodedValue;
}
@Override
public String deserializeWithType(JsonParser jp, DeserializationContext ctxt, TypeDeserializer typeDeserializer) throws IOException {
return StringDeserializer.instance.deserializeWithType(jp, ctxt, typeDeserializer);
}

@Override
public boolean isCachable() { return StringDeserializer.instance.isCachable(); }
}

在您的情况下,您可以注册类反序列化器,调用对象反序列化器的 super 方法。然后,不返回 DeepThirdPartyClass,而是创建 MyClass 对象,从 DeepThirdPartyClass 设置字段一并添加第二个字段。有关实现细节和可用属性,请参阅 StringDeserializer 和其他内容。

请告诉我这是否有帮助。

关于java - 如何配置 Jackson ObjectMapper 将 Foo 类型的所有字段反序列化为 SubclassOfFoo 的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40390429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com