![](/img/trans.png)
[英]How do I call the default deserializer from a custom deserializer in Jackson
[英]how to call default parser (registered in mapper) from custom deserializer
我需要提供Map的自定義反序列化,然后默認序列化程序必須對每個Property對象進行序列化。 該地圖是另一個對象的一部分:
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對象的默認反序列化器?
謝謝
解決方案是以下代碼行:
ObjectMapper mapper = (ObjectMapper)jp.getCodec();
在“ deserialize(...)”方法中調用此方法。 因此,重要的(對我而言)代碼片段是:
ObjectMapper mapper = (ObjectMapper)jp.getCodec();
Property property = mapper.readValue(jn.get("propertyValue").toString(), Property.class));
在此博客上找到。
問題是您將需要一個完全構造的默認解串器; 這需要先構建一個,然后您的解串器才能訪問它。 DeserializationContext
不是您應該創建或更改的東西; 它將由ObjectMapper
提供
因此,您需要在deserialize()
方法中編寫的全部內容是:
ObjectMapper mapper = (ObjectMapper)jp.getCodec();
Property property = mapper.readValue(jn.get("propertyValue").toString(), Property.class));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.