博文首次发布于个人博客:吾勇士的博客
无论我们在使用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
));
}
|
结果: