我需要提供Map的自定义反序列化,然后每个属性对象都必须通过默认的序列化程序进行序列化。该地图是另一个对象的一部分:
class PropertiesHolder {
Map<String, Property> properties;
}
我已经为PropertiesHolder类定义了mixin:
class PropertiesHolderMixIn {
@JsonSerialize(using=PropertiesSerializer.class)
@JsonDeserialize(using=PropertiesDeserializer.class)
Map<String, Property> properties;
}
我也有Propertyin类的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 ...
}
}
}
我看过如何从Jackson的自定义解串器中调用默认解串器,但是对我来说这是行不通的...它以NPE结尾。另外,文章中描述的解决方案为外部类创建了反序列化器,在我看来,该类被定义为mixin,而我也不想为此类创建反序列化器。
请给我指出一个解决方案。在哪里可以获取Property对象的默认反序列化器?
谢谢
问题在于您将需要一个完全构造的默认解串器;这需要先构建一个,然后您的解串器才能访问它。DeserializationContext
不是您应该创建或更改的东西;它将由ObjectMapper
因此,您需要在该deserialize()
方法中编写的只是:
ObjectMapper mapper = (ObjectMapper)jp.getCodec();
Property property = mapper.readValue(jn.get("propertyValue").toString(), Property.class));
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句