jackson的自動檢測機制

jackson容許使用任意的構造方法或工廠方法來構造實例html

使用@JsonAutoDetect(做用在類上)來開啓/禁止自動檢測

fieldVisibility:字段的可見級別java

ANY:任何級別的字段均可以自動識別android

NONE:全部字段都不能夠自動識別ide

NON_PRIVATE:非private修飾的字段能夠自動識別this

PROTECTED_AND_PUBLIC:被protected和public修飾的字段能夠被自動識別spa

PUBLIC_ONLY:只有被public修飾的字段才能夠被自動識別.net

DEFAULT:同PUBLIC_ONLYcode

jackson默認的字段屬性發現規則以下:htm

全部被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的經常使用註解

 

一、@JsonAutoDetect

看上面自動檢測,再也不重複

二、@JsonIgnore

做用在字段或方法上,用來徹底忽略被註解的字段和方法對應的屬性,即使這個字段或方法能夠被自動檢測到或者還有其餘的註解

當@JsonIgnore無論註解在getters上仍是setters上都會忽略對應的屬性

三、@JsonProperty

 

做用在字段或方法上,用來對屬性的序列化/反序列化,能夠用來避免遺漏屬性,同時提供對屬性名稱重命名,好比在不少場景下Java對象的屬性是按照規範的駝峯書寫,可是實際展現的倒是相似C-style或C++/Microsolft style

 

轉:https://blog.csdn.net/eandroidhu/article/details/50341249

相關文章
相關標籤/搜索