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;
}
}