json 常用註解

 一般情況下使用JSON只使用了java對象與字符串的轉換,但是,開發APP時候,我們經常使用實體類來做轉換;這樣,就需要用到註解;

   Jackson默認是針對get方法來生成JSON字符串的,可以使用註解來做一些特殊用途;常見的使用如下:

1 排除屬性
@JsonIgnore,一般標記在屬性或方法上;作用於序列化與反序列化;
@JsonIgnoreProperties,如果是代理類,由於無法標記在屬性或方法上,所以,可以標記在類聲明上;也作用於反序列化時的字段解析;

2 屬性別名
@JsonProperty,序列化/反序列化都有效;

3 屬性排序
@JsonPropertyOrder,註釋在類聲明中;

4 屬性格式轉換
使用自定義序列化/反序列化來處理;
@JsonSerialize,序列化;
@JsonDeserialize,反序列化;

注意:在使用hibernate的時候,查詢數據庫後產生的實體類是個代理類,這時候轉換JSON會報錯;
解決方法有兩種:
1)設置FAIL_ON_EMPTY_BEANS屬性,告訴Jackson空對象不要拋異常;
mapper.disable(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS);
2)使用@JsonIgnoreProperties註解
在實體類聲明處加上@JsonIgnoreProperties(value ={"hibernateLazyInitializer", "handler"})註解;
建議使用@JsonIgnoreProperties註解,這樣生成的JSON中不會產生多餘的字段;

5 父/子關聯
@JsonManagedReference,放在父親類中;
@JsonBackReference,放在孩子類中;

6 去掉包裝
@JsonUnwrapped,意思如下:
Ability to map JSON like
{
"name" : "home",
"latitude" : 127,
"longitude" : 345
}
to classes defined as:
class Place {
public String name;

@JsonUnwrapped
public Location location;
}

class Location {
public int latitude, longitude;
}

參考:
http://wiki.fasterxml.com/JacksonAnnotations
http://www.cowtowncoder.com/blog/archives/2011/10/entry_463.html
http://www.07net01.com/linux/Jacksonzhujiexuexicankao_44238_1356358422.html
發佈了23 篇原創文章 · 獲贊 8 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章