博文首次發佈於個人博客:吾勇士的博客
無論我們在使用fastjson、Jackson還是Gson,我們在用json轉換爲實體類時,都是根據json數據建立對應實體類,但比較噁心的是,有時,有些服務商返回的json報文中,key值爲java中的關鍵字,我們沒法用關鍵字,當做一個類的成員變量,不過不代表我們就沒有其他的辦法解決了;
先給個測試實體類:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
public class
ClientInfoEntity { private Long
id; //
客戶編號 @SerializedName ( "abstract" ) @JSONField (name= "abstract" ) private String
abstract_; @Override public String
toString() { return "ClientInfoEntity
[id="
+ id + ",
abstract_="
+ abstract_ + "]" ; } public String
getAbstract_() { return abstract_; } public void
setAbstract_(String abstract_) { this .abstract_
= abstract_; } public void
setId(Long id) { this .id
= id; } } |
解決方案如下:
①使用fastjson:
則在實體類中的對應成員變量中加上以下註解:
1
2
|
@JSONField (name= "abstract" ) private String
abstract_; |
②使用gson
則在實體類中的對應成員變量中加上以下註解:
1
2
|
@SerializedName ( "abstract" ) private String
abstract_; |
③使用jackson
則在實體類中的對應成員變量中加上以下註解:
1
2
|
@JsonProperty ( "abstract" ) private String
abstract_; |
當然了,三種註解是不衝突的,如果項目中使用多種方式解析,可以將對應的註解都加上,如給的測試實體類,我就加了fastjson和gson的兩種註解
單元測試方法:
1
2
3
4
5
6
7
|
@org .junit.Test public void
testGson(){ String
json = "{id:1,abstract:231}" ; ClientInfoEntity
clientInfoEntity = new Gson().fromJson(json,
ClientInfoEntity. class ); System.out.println(clientInfoEntity); System.out.println(JSON.parseObject(json,
ClientInfoEntity. class )); } |
結果: