【发布时间】:2018-09-05 17:15:46
【问题描述】:
我想反序列化以下 JSON 输入:
{
"key1": "value1",
"key2": "value2"
}
放入包含哈希映射的类对象中:
public class ClassContainingMap {
private Map<String, String> map = new HashMap<>();
public Map<String, String> getMap() {
return map;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
}
执行时
ClassContainingMap m = objectMapper.readValue(json, ClassContaininMap.class);
我明白了
com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of test.ClassContainingMap: no Stri
ng-argument constructor/factory method to deserialize from String value ('key1')
at [Source: "key1": "value1", "key2": "value2"; line: 1, column: 1]
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:270)
at com.fasterxml.jackson.databind.DeserializationContext.instantiationException(DeserializationContext.java:1456)
at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1012)
at com.fasterxml.jackson.databind.deser.ValueInstantiator._createFromStringFallbacks(ValueInstantiator.java:370)
at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createFromString(StdValueInstantiator.java:315)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromString(BeanDeserializerBase.java:1283)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:159)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:150)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3814)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2858)
我发现当用@JsonValue 注释getter 时,我可以让另一个方向(序列化)工作,但到目前为止我还无法为反序列化解决这个问题。有没有什么简单的(注解?)方法可以实现这一点,而无需编写自定义反序列化器?
【问题讨论】:
标签: java json hashmap jackson deserialization