gpt4 book ai didi

java - 如何从自定义反序列化器调用默认解析器(在映射器中注册)

转载 作者:太空宇宙 更新时间:2023-11-04 14:59:28 26 4
gpt4 key购买 nike

我需要提供 Map 的自定义反序列化,然后每个 Property 对象都必须由默认序列化程序序列化。该 map 是另一个对象的一部分:

class PropertiesHolder {
Map<String, Property> properties;
}

我已经为 PropertiesHolder 类定义了 mixin:

class PropertiesHolderMixIn {
@JsonSerialize(using=PropertiesSerializer.class)
@JsonDeserialize(using=PropertiesDeserializer.class)
Map<String, Property> properties;
}

我还有 Property 类的 mixin。 ObjectMapper初始化:

ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.setMixInAnnotation(Property.class, PropertyMixIn.class);
module.setMixInAnnotation(PropertiesHolder.class, PropertiesHolderMixIn.class);
mapper.registerModule(module);

我的反序列化器:

class PropertiesDeserializer extends JsonDeserializer<Map<String, Property>> {
public Map<String, Property> deserialize(JsonParser jp, DeserializationContext ctxt) throws ... {
ArrayNode node = (ArrayNode) jp.readValueAsTree();
for (int i = 0, size = node.size() ; i < size ; i++) {
ObjectNode jn = (ObjectNode) node.get(i);
String key = jn.get("propertyName").textValue();
String value = jn.get("propertyValue").toString();
... HERE I need to call registered deserializer for Property class over value ...
}
}
}

我看过How do I call the default deserializer from a custom deserializer in Jackson ,但它对我不起作用......它以 NPE 结尾。另外,帖子中描述的解决方案为外部类创建反序列化器,对我来说,外部类被定义为 mixin,我不想为此类创建反序列化器。

请给我一个解决方案。在哪里可以获得 Property 对象的默认反序列化器?

谢谢

最佳答案

问题是您将需要一个完全构建的默认反序列化器;这需要构建一个,然后您的解串器才能访问它。 DeserializationContext 不是您应该创建或更改的内容;它将由ObjectMapper

提供

因此,您需要在 deserialize() 方法中编写的是:

ObjectMapper mapper = (ObjectMapper)jp.getCodec();
Property property = mapper.readValue(jn.get("propertyValue").toString(), Property.class));

关于java - 如何从自定义反序列化器调用默认解析器(在映射器中注册),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22783157/

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