這是本文件的舊版!


The visibility of the fields

本篇文章在說明:

  • 預設的輸出欄位顯示規則
  • 如何使用@JsonAutoDetect去改變欄位顯示規則

在沒有特別設定的情況下,Jackson的Serializer是根據Get Method與Class的public data member決定欄位名稱。
public data member:

public String mName = "test";
Output:
{"mName":"test"}
get method,boolean回傳值被稱為is-getter:
public String getName(){ return "test"; }
public boolean isValid(){ return false; }
Output:
{"name":"test","valid":false}

@JsonAutoDetect提供五種項目設定,其中creatorVisibility與setterVisibility的實際用途還不曉得,之後再研究:

  • fieldVisibility: 針對data member。
  • getterVisibility: 針對getXXX()。
  • isGetterVisibility: 針對type為boolean的isXXX()。

預設情況下,成員變數必須宣告為public才會出現在結果。假如使用了fieldVisibility=Visibility.ANY,則會將private成員變數也輸出:

	@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;
		}
	}
Output:
{"mName":"test","name":"test"}
而getterVisibility與isGetterVisibility也類似,只是針對項目不同而已。