我遇到的问题是无法对可能在其中定义hashmap的类进行deseriablize。
我的课程定义如下:
public class <T extends Serializable> MyClass1 {
private Map<String,List<MyClass2<T>>> entity;
boolean moreData=false;
public Map<String,List<MyClass2<T>>> getEntity() {
return entity;
}
public void setEntity(Map<String,List<MyClass2<T>>> entity) {
this.entity = entity;
}
public boolean isMoreDataAvailable()
{
return moreData;
}
}
序列化类的内容会产生如下输出:
ObjectMapper om = getObjectMapper();
om.writeValueAsString(myclass1inst);
{
"MyClass1" : {
"entity" : {
"java.util.HashMap" : {
"SITE_ADD" : {
"java.util.ArrayList" : [ {
"MyClass2" : {
"priority" : 3,
"groupName" : null,
"payload" : {
"MyClass3" : {
"networkType" : "HIGH_SPEED_LAN",
"nativeSite" : true
}
"groupOrderType" : null,
"entityGuid" : null
}
} ]
}
}
},
"moreDataAvailable" : false
}
}
问题是反序列化对我来说没有这个例外。
ObjectMapper om = getObjectMapper();
om.readValue(content, MyClass1.class);
2013-06-27 02:55:47,822 [[ACTIVE]反序列化推送时出错 请求:无效的类型ID'SITE_ADD'(对于id类型'Id.class'):没有这样的 找到的类(通过参考链:MyClass1 [“entity”])
为什么json认为字符串site_add的类型为Id.class。
在阅读jackson json文档时,我发现HashMap必须注册为以下内容:
http://wiki.fasterxml.com/JacksonInFiveMinutes
Map result = mapper.readValue(src,new TypeReference&gt;(){});
我是否必须实施 @jsondeserialable 来定义自定义反序列化。请提供你的建议。
以下是对象初始化的代码
public static ObjectMapper getObjectMapper() {
ObjectMapper om = new ObjectMapper();
// to remove wrapping of root element
om.configure(SerializationConfig.Feature.WRAP_ROOT_VALUE, false);
om.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
// to handle inheritence
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL,
JsonTypeInfo.As.WRAPPER_OBJECT);
// to ignore getters which doesnt have setters
om.configure(SerializationConfig.Feature.AUTO_DETECT_FIELDS, false);
// to ignore extra properties during deserialization
om.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES,
false);
return om;
}
在上面的例子中,变量T指向MyClass3。