問題
接收json格式為:
{
"attributes": {},
"dataItems": [
{
"attributes": {
"cardNo": "",
"isOut": "1",
"inOperator": "Admin",
"carNo": "浙-*****",
"parkName": "馬賽克",
"inTime": "2018-01-12 09:22:31",
"inEventType": "",
"inEquip": "6樓87號入口",
"cardType": "臨時車A",
"parkCode": "0000007796"
},
"failItems": [],
"objectId": "",
"operateType": "READ",
"subItems": []
}
],
"resultCode": 0,
"seqId": "-983v_4cbn",
"serviceId": "3c.park.queryparkinrecord"
}
接收的對象為:
public class JHTResult {
// 定義jackson對象
private static final ObjectMapper MAPPER = new ObjectMapper();
//服務標識
private String serviceId;
//返回碼0:成功,1:未知錯誤,2:參數不正確
private Integer resultCode;
private String seqId;
private Object attributes;
private String message;
private List<JHTDataItemsResult> dataItems;
//省略get set
}
其中:JHTDataItemsResult.java為:
public class JHTDataItemsResult<E> {
//子對象ID
private String objectId;
//子對象操作類型,固定值傳入:READ
private String operateType;
//返回結果值對象
private E attributes;
private List failItems;
private List subItems;
//省略get set
}
當將json轉化為JHTResult時,獲取attributes屬性時
JHTVehicleRecordData resultVo = (JHTVehicleRecordData) attributes;
報以下錯誤:
java.util.LinkedHashMap cannot be cast to com.*****.park.model.vo.JHTVehicleRecordData
解決方法
先將對象轉為json字符串,再根據ObjectMapper類的readValue()方法轉化為對應class的類對象
JHTVehicleRecordData resultVo = JsonUtils.conveterObject(attributes, JHTVehicleRecordData.class);
其中JsonUtils.java為:
public class JsonUtils {
/**
* <p>
* 對象轉JSON字符串
* </p>
*/
public static String object2Json(Object obj) {
String result = null;
try {
ObjectMapper objectMapper = new ObjectMapper();
result = objectMapper.writeValueAsString(obj);
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
public static Map object2Map(Object obj) {
String object2Json = object2Json(obj);
Map<?, ?> result = jsonToMap(object2Json);
return result;
}
/**
* <p>
* JSON字符串轉Map對象
* </p>
*/
public static Map<?, ?> jsonToMap(String json) {
return json2Object(json, Map.class);
}
/**
* <p>
* JSON轉Object對象
* </p>
*
*/
public static <T> T json2Object(String json, Class<T> cls) {
T result = null;
try {
ObjectMapper objectMapper = new ObjectMapper();
result = objectMapper.readValue(json, cls);
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
public static <T> T conveterObject(Object srcObject, Class<T> destObjectType) {
String jsonContent = object2Json(srcObject);
return json2Object(jsonContent, destObjectType);
}
}