Jackson将json字符串转换成List<JavaBean>

Jackson处理一般的JavaBean和Json之间的转换只要使用ObjectMapper 对象的readValue和writeValueAsString两个方法就能实现。但是如果要转换复杂类型Collection如 List<YourBean>,那么就需要先反序列化复杂类型 为泛型的Collection Type。

如果是ArrayList<YourBean>那么使用ObjectMapper 的getTypeFactory().constructParametricType(collectionClass, elementClasses);

如果是HashMap<String,YourBean>那么 ObjectMapper 的getTypeFactory().constructParametricType(HashMap.class,String.class, YourBean.class);

譬如,我有如下一个Config.java对象

 1 public class Config {
 2     private String name;
 3     private String value;
 4 
 5     public Config() {
 6     }
 7 
 8     public Config(String name, String value) {
 9         this.name = name;
10         this.value = value;
11     }
12 }

如果我需要将json字符串转换为Config对象数组,即执行反序列号,则需要执行以下的方法:

 1 public final ObjectMapper mapper = new ObjectMapper(); 
 2      
 3 public static void main(String[] args) throws Exception{  
 4 
 5     String jsonString = getConfig(); //getConfig省略
 6 
 7     //List<Config> configList =  (List<Config>)jsonString 
 8     //上面这样转换是错的,但是编译没有报错,运行时才报错
 9 
10     JavaType javaType = getCollectionType(ArrayList.class, Config.class); 
11     List<Config> configList =  mapper.readValue(jsonString, javaType);   //这里不需要强制转换
12 }   
13 
14 
15 /**   
16 * 获取泛型的Collection Type  
17 * @param collectionClass 泛型的Collection   
18 * @param elementClasses 元素类   
19 * @return JavaType Java类型   
20 * @since 1.0   
21 */   
22 public static JavaType getCollectionType(Class<?> collectionClass, Class<?>... elementClasses) {   
23     return mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);   
24 }

 

 

 

转载于:https://www.cnblogs.com/yves/p/6145328.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值