jackson允許使用任意的構造方法或工廠方法來構造實例
使用@JsonAutoDetect(作用在類上)來開啟/禁止自動檢測
fieldVisibility:字段的可見級別
ANY:任何級別的字段都可以自動識別
NONE:所有字段都不可以自動識別
NON_PRIVATE:非private修飾的字段可以自動識別
PROTECTED_AND_PUBLIC:被protected和public修飾的字段可以被自動識別
PUBLIC_ONLY:只有被public修飾的字段才可以被自動識別
DEFAULT:同PUBLIC_ONLY
jackson默認的字段屬性發現規則如下:
所有被public修飾的字段->所有被public修飾的getter->所有被public修飾的setter
舉例:
public static class TestPOJO{ TestPOJO(){} TestPOJO(String name){ this.name = name; } private String name; @Override public String toString() { return "TestPOJO{" + "name='" + name + '\'' + '}'; } }
這個類我們只有一個private的name屬性,並且沒有提供對應的get,set方法,如果按照默認的屬性發現規則我們將無法序列化和反序列化name字段(如果沒有get,set方法,只有被public修飾的屬性才會被發現),你可以通過修改@JsonAutoDetect的fieldVisibility來調整自動發現級別,為了使name被自動發現,我們需要將級別調整為ANY
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
同理,除了fieldVisibility可以設置外,還可以設置getterVisibility、setterVisibility、isGetterVisibility、creatorVisibility級別
jackson的常用注解
1、@JsonAutoDetect
看上面自動檢測,不再重復
2、@JsonIgnore
作用在字段或方法上,用來完全忽略被注解的字段和方法對應的屬性,即便這個字段或方法可以被自動檢測到或者還有其他的注解
當@JsonIgnore不管注解在getters上還是setters上都會忽略對應的屬性
3、@JsonProperty
作用在字段或方法上,用來對屬性的序列化/反序列化,可以用來避免遺漏屬性,同時提供對屬性名稱重命名,比如在很多場景下Java對象的屬性是按照規范的駝峰書寫,但是實際展示的卻是類似C-style或C++/Microsolft style
轉:https://blog.csdn.net/eandroidhu/article/details/50341249
