jackson的自動檢測機制


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM