2017-04-26 94 views
2
地圖

我將用傑克遜Objectmapper並將其保存到數據庫作爲varchar2.My代碼對象轉換成字符串轉換字符串在Java

AuditDataLog dataLog = new AuditDataLog(); 
ObjectMapper mapper = new ObjectMapper(); 
dataLog.setData(mapper.writeValueAsString(obj)); 

它保存到數據庫作爲Varchar2.but時我檢索數據庫這個值,並想用將其轉換成地圖ObjectMapper它不能做that.it給人這樣

"com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [map type; class java.util.HashMap" 

這裏的例外是我的代碼

Map map = mapper.readValue(obj,HashMap.class)); 

obj是數據庫值,它是string.this是我想從中轉換映射的字符串。

"\"MerOrder\":{\"cusAccPartyId\":\"4632\",\"cusAccParty\":{\"fullName\":\"Kariban\"},\"merAccPartyId\":\"4800\",\"merAccParty\":{\"fullName\":\"Golam Sarwer\"},\"season\":\"a455\",\"tfReceiveDate\":\"26 Apr 2017\",\"styleName\":\"a123\",\"styleNo\":\"s345\",\"sizeRange\":\"1\",\"merVariantValue\":{\"name\":\"XL-XS\"}}" 

我該怎麼辦?

+3

你保存的是沒有散列表。它是「MerOrder」類型的一個對象 – Jens

回答

0

失敗的原因監守你試圖deserialise的String的原因是不是有效的json,你需要將其包裝成花括號,以使其成爲有效json。下面應該很好:

String s = "\"MerOrder\":{\"cusAccPartyId\":\"4632\",\"cusAccParty\":{\"fullName\":\"Kariban\"},\"merAccPartyId\":\"4800\",\"merAccParty\":{\"fullName\":\"Golam Sarwer\"},\"season\":\"a455\",\"tfReceiveDate\":\"26 Apr 2017\",\"styleName\":\"a123\",\"styleNo\":\"s345\",\"sizeRange\":\"1\",\"merVariantValue\":{\"name\":\"XL-XS\"}}"; 
ObjectMapper mapper = new ObjectMapper(); 
HashMap value = mapper.readValue("{" + s + "}", HashMap.class); 
System.out.println(value);