org.codehaus.jackson.map.JsonMappingException: Can not deserialize

来源:互联网 发布:周边手办数据 编辑:程序博客网 时间:2024/05/01 20:24


在用jackson-core-asl-1.9.10.jar和jackson-mapper-asl-1.9.10.jar两个包做json字符串转换Pojo对象时报如下异常:

org.codehaus.jackson.map.JsonMappingException:Can not deserialize instance of java.util.List out of START_OBJECT token




Java代码如下:


ObjectMapper mapper = new ObjectMapper();


String myajsonstr = "{"myname":{"first":"yu2","last":"shibo2"},"myflag":false,"myversion":"version-1.1","myage":31,"mygender":"FAMALE"}";


List myListBean = mapper.readValue(myajsonstr, new TypeReference>(){});




运行后的信息如下:


org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.util.List out of START_OBJECT token
 at [Source: java.io.StringReader@15a64e6; line: 1, column: 1]
at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)
at org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:198)
at org.codehaus.jackson.map.deser.CollectionDeserializer.handleNonArray(CollectionDeserializer.java:149)
at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:107)
at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:97)
at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:26)
at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2395)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1602)




上述问题在网上搜了好久都没找到解决的办法,最后只能根据报错信息去查jackson的API文档,这个过程比较痛苦,就是一个一个的做实验,根据错误信息中的Can not deserialize instance of java.util.List out of START_OBJECT token这一句基本可以断定是类信息不能被反序列化,到jackson的API文档里(http://jackson.codehaus.org/1.8.8/javadoc/index.html)找到DeserializationConfig.Feature这个Enum类,发现其中有个ACCEPT_SINGLE_VALUE_AS_ARRAY属性,大致翻译了一下给的解释,意思是反序列化的作用是确定是否强制让非数组模式的json字符串与java集合类型相匹配。




【解决方法】:在List myListBean = mapper.readValue(myajsonstr, new TypeReference>(){});这句之前加上mapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);这句,DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY属性默认值是false,其中的MyAnotherJsonBean.java是笔者迎合json字符串自定义的Pojo类,里面就是基本属性和set、get方法



http://blog.sina.com.cn/s/blog_4f925fc30102eel3.html

0 0
原创粉丝点击