jackson 字符串转换成List集合的问题请教

问题描述

我使用了jackson先将一个List集合对象转换成json字符串后,再将json字符串转成List集合出了问题 ,报错信息如下:Exception in thread "main" org.codehaus.jackson.map.JsonMappingException: No suitable constructor found for type [simple type, class com.mailbill.HDataA]: can not instantiate from JSON object (need to add/enable type information?) at [Source: java.io.StringReader@147917a; line: 1, column: 3]at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObjectUsingNonDefault(BeanDeserializer.java:746)at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:683)at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:217)at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:194)at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:30)at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2732)at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1877)at com.mailbill.datacore.util.JsonUtil.jacksonToCollection(JsonUtil.java:315)at com.mailbill.TestJson.main(TestJson.java:27)我的List集合中的对象里有一个属性也是一个集合,代码如下:HData.javapackage com.mailbill;import java.util.List;public class HDataA {private String name;private String code;private List<HDataB> dataBList ;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getCode() {return code;}public void setCode(String code) {this.code = code;}public List<HDataB> getDataBList() {return dataBList;}public void setDataBList(List<HDataB> dataBList) {this.dataBList = dataBList;}public HDataA(String name, String code, List<HDataB> dataBList) {super();this.name = name;this.code = code;this.dataBList = dataBList;}}HDataB.java:package com.mailbill;public class HDataB {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public HDataB(String name) {super();this.name = name;}}我的测试类:package com.mailbill;import java.util.ArrayList;import java.util.List;import org.aspectj.apache.bcel.generic.ARRAYLENGTH;import com.mailbill.datacore.util.JsonUtil;public class TestJson {/** * @param args * @throws Exception */public static void main(String[] args) throws Exception {// TODO Auto-generated method stubList<HDataA> dataAlist = new ArrayList<HDataA>();List<HDataB> dataBList = new ArrayList<HDataB>();dataBList.add(new HDataB("hehe"));dataBList.add(new HDataB("xixi"));dataAlist.add(new HDataA("nidaye","woqu", dataBList));String str = JsonUtil.objectToJackson(dataAlist);System.out.println(str);dataAlist = JsonUtil.jacksonToCollection(str, List.class, HDataA.class);if(dataAlist ==null){System.out.println(" dataAlist is null");}else{System.out.println(" ok ");}}}JsonUtion.java:private static ObjectMapper jacksonMapper = new ObjectMapper();public static String objectToJackson(Object obj) throws Exception {return jacksonMapper.writeValueAsString(obj);}public static <T> T jacksonToCollection(String src,Class<?> collectionClass, Class<?>... valueType)throws Exception {JavaType javaType= jacksonMapper.getTypeFactory().constructParametricType(collectionClass, valueType); return (T)jacksonMapper.readValue(src, javaType);}不知道jackson如何对这类集合进行转换?

解决方案

加一句即可 objectMapper.enableDefaultTyping();
解决方案二:
是需要给HDataA提供个无参数的构建器吧。

时间: 2024-11-10 14:11:52

jackson 字符串转换成List集合的问题请教的相关文章

jsp-怎么把JSON字符串转换成java字符串或数组或者集合

问题描述 怎么把JSON字符串转换成java字符串或数组或者集合 var chk_value =[]; $('input[name="zd_resourcecb"]:checked').each(function(){ chk_value.push($(this).val()); }); var chk_values = JSON.stringify(chk_value); jsp是这么写的 不过得到的是JSON字符串 ,我想要得到java类型的字符串或是数组什么的 解决方案 字符串反

把数据库中有关枚举项值的数字字符串转换成文字字符串

原文:把数据库中有关枚举项值的数字字符串转换成文字字符串   标题可能无法表达我的本意.比如,有这样一个枚举:   public enum MyChoice { MyFirstChoice = 0, MySecondChoice =1, MyThirdChoice = 2 }   数据库中,某表某字段保存值为"0,1,2",在显示的时候,我们希望是"第一个选择,第二个选择,第三个选择".如何做呢?   可以为枚举项上面标注自定义特性.先自定义一个特性如下:   pu

asp.net.想要实现一个文字字符串转换成MP3和wav格式的语音

问题描述 asp.net.想要实现一个文字字符串转换成MP3和wav格式的语音 2C 文字字符串转换成MP3和wav格式的语音文件并且存入数据库,请问如何实现.需要转换成音频文件后可以读出文字内容 解决方案 你需要一个与字符对应的音频库,就像电子琴.比如1对应声音多,2对应声音来,3对应声音咪--,还有长音,短音,4分,8分等等,当你输入一个字符串时,找到跟他对应的声音,就能实现准确的转换了.

字符串转换成时间格式如何去掉自带的星期以及上下午

问题描述 字符串转换成时间格式如何去掉自带的星期以及上下午 最近遇到一个恼火的问题,通过控件获得的时间会自动加上星期 以及 上(下)午因为数据库该时间 字段的长度是固定的 一旦加上星期和上下午就会超出范围,目前 试过N 种方法都无法成功例如 将时间 截取成 "2014-08-11"的字符串,一旦Conver.toDateTime后立马变成了"2014-08-11 星期六 下午 12:00...""的形式目前试过改时间右下角,以及各种转换时间格式的形式,都失

把普通字符串转换成二进制字符串的函数写出来了,和大家分享一下。

二进制|函数|转换|字符串 '普通字符串转换成二进制字符串函数Function Str2Bin(String)  Dim i, tmpbin  For i=1 to strLength(String)    tmpbin = tmpbin & ChrB(Asc(Mid(String,I,1)))  Next  Str2Bin = tmpbinEnd Function '以下函数来自ChinaASP,计算字符串的真正字节数(支持中文)Function strLength(str)   If (le

怎样利用正则表达式把用URLEncode的字符串转换成正常的字符串函数

encode|函数|正则|转换|字符串 <script language=JavaScript RUNAT=SERVER>// 利用正则表达式把用URLEncode的字符串转换成正常的字符串函数function URLDecode(EncodeString) {  var lsRegExp = /\+/g;  return unescape(String(EncodeString).replace(lsRegExp, " ")); }</script> 使用例子

php将字符串转换成16进制的方法

 这篇文章主要介绍了php将字符串转换成16进制的方法,涉及php中bin2hex函数的使用技巧,非常具有实用价值,需要的朋友可以参考下     本文实例讲述了php将字符串转换成16进制的方法.分享给大家供大家参考.具体分析如下: php中可以通过bin2hex函数将字符串转换成16进制的形式输出,bin2hex()函数返回结果为ascii码 ? 1 2 3 4 5 <?php $string = "Hellotworld!n"; print($string."n&q

js字符串转换成数字与数字转换成字符串的实现方法

 本篇文章主要是对js字符串转换成数字与数字转换成字符串的实现方法进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 js字符串转换成数字   将字符串转换成数字,得用到parseInt函数. parseInt(string) : 函数从string的开始解析,返回一个整数.     举例: parseInt('123') : 返回 123(int): parseInt('1234xxx') : 返回 1234(int):   如果解析不到数字,则将返回一个NaN的值,可以用isNa

JavaScript将字符串转换成字符编码列表的方法

 这篇文章主要介绍了JavaScript将字符串转换成字符编码列表的方法,实例分析了javascript中charCodeAt函数的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了JavaScript将字符串转换成字符编码列表的方法.分享给大家供大家参考.具体如下: JavaScript将字符串转换成字符编码列表,例如foo转换成 [112,111,111] 方法 1: JavaScript 1.6 ? 1 2 Array.map('foo', function(x)