日常
總算是把版本2.0寫完了,晚上通一通接口,看看還有哪些小bug。
今天說說我下午發現的關於java對象的json序列號的一個問題,大概就是在使用jackson的包序列化對象的時候,有兩個我後來添加的成員怎麼也無法被序列化!總是缺少那兩個屬性!
問題原因
絲毫沒有辦法的我,查了一通資料,竟然發現沒有和我類似經歷的人!只好自己找問題所在了……
其實實際問題是:我要序列化的那個對象,因爲我新增了屬性,而新增的屬性我沒有寫getter,所以private是無法被jackson的包訪問到的!
解決
寫了getter之後,問題順利解決
附:jackson包使用小demo+單例模式
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
public class JacksonDemo {
//私有靜態實例,賦值爲空,延遲加載
private static ObjectMapper objectMapper=null;
//私有構造,防止實例化
private JacksonDemo(){}
//靜態方法創建單個實例
public static ObjectMapper getObjectMapper(){
if(objectMapper==null){
objectMapper=new ObjectMapper();
}
return objectMapper;
}
private static String toJson(Object object) throws JsonProcessingException {
//java對象序列化爲Json字符串
return getObjectMapper().writeValueAsString(object);
}
private static <T> T fromJson(String json,Class<T> type) throws IOException {
//將Json字符串反序列化爲java對象
return getObjectMapper().readValue(json,type);
}
public static void main(String[] args) {
//status是一個有三個私有屬性的類,分別是String status,String msg,Object data;
Status status=new Status();
status.setData("abc");
try {
//將status輸出爲json字符串
System.out.println(toJson(status));
//將json字符串轉換爲Status對象
String json="{\"status\":\"success\",\"msg\":\"seller goods found successfully!\",\"data\":[{\"id\":\"014352373888\",\"name\":\"%E4%BC%91%E9%97%B2%E5%A8%B1%E4%B9%90+%E6%91%84%E5%BD%B1%E4%B9%8B%E5%9C%B0\",\"price\":128.0,\"city\":null,\"route\":null,\"pictures\":[\"/img/goods/014352373888/1.png\"],\"description\":null,\"comment\":null,\"seller\":{\"headPicture\":\"/img/headPic.png\",\"phoneNumber\":\"11111111111\",\"sex\":null,\"name\":\"testuser\"},\"pubtime\":\"1514523738880\"}]}";
Status s=fromJson(json,Status.class);
System.out.println(s.getStatus());
} catch (IOException e) {
e.printStackTrace();
}
}
}
總結
結果如圖,emmmmmm。
- 這裏可以看到轉換成json字符串就比較單一
- 轉換成java對象,仔細看小框:對於我給出的class文件,它會正確的實例化這個類,而我類裏的Object對象由於沒有特定的類,所以默認鍵值對是使用的LinkedHashMap,而鍵值對之間的數組使用的是ArrayList
PS:2018年快樂!
關於Jackson註解的內容參考大佬的文章 Jackson常用註解介紹