jackson序列化 屬性 get 欄位不對應
阿新 • • 發佈:2018-12-06
在jackson序列化物件時,由於其在原始碼中增加了一個可見性判斷,會預設只序列化public修飾的欄位和方法,造成一個可能存在的問題是你欄位明明是CId,但是自動生成的get方法是getCId的話,jackson會將欄位序列化成cid,造成一個反序列失敗的問題(2.0.2到最新2.9.6版本測試),附上程式碼:
public class Test { public static void main(String[] args) throws IOException { Student stu = new Student(); stu.setCId("王者"); stu.setAge(12); ObjectMapper map = new ObjectMapper(); //map.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); //map.setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE); String json = map.writeValueAsString(stu); System.out.println(json); } } class Student implements Serializable { private static final long serialVersionUID = 1L; private String CId; private int age; public String getCId() { return CId; } public void setCId(String CId) { this.CId = CId; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
附上執行結果:
解決辦法:jackson換成fastjson,或者將我上面程式碼中貼出來的註釋去掉就好(全部欄位可見,不對get方法進行序列化)
有興趣的可以研究下其原始碼!