差異處

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

連向這個比對檢視

Both sides previous revision 前次修改
下次修改
前次修改
java:jackson:annotation:jsonautodetect [2016/02/21 22:03]
tony
java:jackson:annotation:jsonautodetect [2023/06/25 09:48] (目前版本)
行 5: 行 5:
   * 預設的輸出欄位顯示規則   * 預設的輸出欄位顯示規則
   * 如何使用@JsonAutoDetect去改變欄位顯示規則   * 如何使用@JsonAutoDetect去改變欄位顯示規則
 +  * Global顯示規則之設定
 ===== Default Visibility ===== ===== Default Visibility =====
 在沒有特別設定的情況下,Jackson的Serializer是根據Get Method與Class的public data member決定欄位名稱。 在沒有特別設定的情況下,Jackson的Serializer是根據Get Method與Class的public data member決定欄位名稱。
行 53: 行 54:
 </​code>​ </​code>​
 而getterVisibility與isGetterVisibility也類似,只是針對項目不同而已。 而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 ===== ===== Reference =====
   * [[http://​www.cowtowncoder.com/​blog/​archives/​2011/​02/​entry_443.html|Filtering properties]]   * [[http://​www.cowtowncoder.com/​blog/​archives/​2011/​02/​entry_443.html|Filtering properties]]
   * [[http://​tutorials.jenkov.com/​java-json/​jackson-annotations.html|Jackson annotations]]   * [[http://​tutorials.jenkov.com/​java-json/​jackson-annotations.html|Jackson annotations]]
 +  * [[http://​stackoverflow.com/​questions/​7105745/​how-to-specify-jackson-to-only-use-fields-preferably-globally|how to specify jackson to only use fields - preferably globally?]]
 =====    ===== =====    =====
 ---- ----
 \\ \\
 ~~DISQUS~~ ~~DISQUS~~