jackson反序列化主要有两种情况,一种是单对象反序列化,另一种是多对象、复杂对象(集合等)反序列化,具体如下:
一、单对象序列化
LatConfig latConfigObject = JacksonUtil.readValue(latConfig, LatConfig.class);
二、多对象、复杂对象(集合等)
List<EnumConfig> enumConfigs = JacksonUtil.readValue(enumConfig, new TypeReference<List<EnumConfig>>(){});
上面的
latConfig,和emumConfig 是对应对象的json字符串
这里调用的readValue方法是对Jackson方法进行封装过后工具类里面的方法,工具类代码如下:
package com.lcma.zhbs.common.util;
import org.apache.log4j.Logger;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
* <p>Title : 工具类</p>
* <p>Description: json字符与对像转换</p>
* <p>Copyright : Copyright (c) 2016</p>
* <p>Company : company</p>
* @author : lcma
* @version : 1.0
*/
public final class JacksonUtil {
private JacksonUtil(){
}
/**
* log 记录日志
*/
private static final Logger LOGGER = Logger.getLogger(JacksonUtil.class);
/**
* ObjectMapper 对象转换器
*/
public static ObjectMapper objectMapper;
/**
* 使用泛型方法,把json字符串转换为相应的JavaBean对象。
* (1)转换为普通JavaBean:readValue(json,Student.class)
* (2)转换为List,如List<Student>,将第二个参数传递为Student
* [].class.然后使用Arrays.asList();方法把得到的数组转换为特定类型的List
*
* @param jsonStr
* @param valueType
* @return
*/
public static <T> T readValue(String jsonStr, Class<T> valueType) {
if (objectMapper == null) {
objectMapper = new ObjectMapper();
}
try {
return objectMapper.readValue(jsonStr, valueType);
} catch (Exception e) {
LOGGER.error(e);
}
return null;
}
/**
* json数组转List
* @param jsonStr
* @param valueTypeRef
* @return
*/
public static <T> T readValue(String jsonStr, TypeReference<T> valueTypeRef){
if (objectMapper == null) {
objectMapper = new ObjectMapper();
}
try {
return objectMapper.readValue(jsonStr, valueTypeRef);
} catch (Exception e) {
LOGGER.error(e);
}
return null;
}
/**
* 把JavaBean转换为json字符串
*
* @param object
* @return
*/
public static String toJSon(Object object) {
if (objectMapper == null) {
objectMapper = new ObjectMapper();
}
try {
return objectMapper.writeValueAsString(object);
} catch (Exception e) {
LOGGER.error(e);
}
return null;
}
}