差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

java:jackson:annotation:jsonautodetect [2016/02/21 22:26]
tony [Summary]
java:jackson:annotation:jsonautodetect [2023/06/25 09:48]
行 1: 行 1:
-{{tag>​java jackson}} 
-====== The visibility of the fields ====== 
-===== Introduction ===== 
-本篇文章在說明:​ 
-  * 預設的輸出欄位顯示規則 
-  * 如何使用@JsonAutoDetect去改變欄位顯示規則 
-  * Global顯示規則之設定 
-===== Default Visibility ===== 
-在沒有特別設定的情況下,Jackson的Serializer是根據Get Method與Class的public data member決定欄位名稱。 
-\\ 
-public data member: 
-<code java> 
-public String mName = "​test";​ 
-</​code>​ 
-Output: 
-<​code>​ 
-{"​mName":"​test"​} 
-</​code>​ 
-get method,boolean回傳值被稱為is-getter:​ 
-<code java> 
-public String getName(){ return "​test";​ } 
-public boolean isValid(){ return false; } 
-</​code>​ 
-Output: 
-<​code>​ 
-{"​name":"​test","​valid":​false} 
-</​code>​ 
-===== Use @JsonAutoDetect ===== 
-@JsonAutoDetect提供五種項目設定,其中creatorVisibility與setterVisibility的實際用途還不曉得,之後再研究:​ 
-  * fieldVisibility:​ 針對data member。 
-  * getterVisibility:​ 針對getXXX()。 
-  * isGetterVisibility:​ 針對type為boolean的isXXX()。 
-預設情況下,成員變數必須宣告為public才會出現在結果。假如使用了fieldVisibility=Visibility.ANY,則會將private成員變數也輸出:​ 
-<code java> 
- @JsonAutoDetect(fieldVisibility=Visibility.ANY) 
- public static class AutoDetectObject { 
- private String mName ; 
  
- public AutoDetectObject(){ 
-  
- } 
- private void setName(String aName){ 
- mName = aName; 
- } 
-  
- public String getName(){ 
- return mName; 
- } 
- } 
-</​code>​ 
-Output: 
-<​code>​ 
-{"​mName":"​test","​name":"​test"​} 
-</​code>​ 
-而getterVisibility與isGetterVisibility也類似,只是針對項目不同而已。 
-===== Global visibility ===== 
-如果visibility的規則一致,且不想在各類別上設定,則可以透過調整ObjectMapper的VisibilityChecker達到目的:​ 
-<code java> 
- VisibilityChecker<?>​ checker = mapper.getVisibilityChecker(). 
- withGetterVisibility(Visibility.NONE). 
- withIsGetterVisibility(Visibility.NONE);​ 
- mapper.setVisibility(checker);​ 
-</​code>​ 
-如果有特別需求的部分,只要再使用@JsonAutoDetect就可以覆蓋了。 
-===== Summary ===== 
-一般情況下是不太需要使用到@JsonAutoDetect或VisibilityChecker。除非每個要顯示的欄位都已透過@JsonProperty定義,且名稱可能與Get Method不同,這時候你就會需要將getterVisibility與isGetterVisibility設為NONE;當然你也可以用@JsonIgnore將Get Method濾掉。至於要用哪種,就視你喜好而定了。 
-===== Reference ===== 
-  * [[http://​www.cowtowncoder.com/​blog/​archives/​2011/​02/​entry_443.html|Filtering properties]] 
-  * [[http://​tutorials.jenkov.com/​java-json/​jackson-annotations.html|Jackson annotations]] 
-=====    ===== 
----- 
-\\ 
-~~DISQUS~~