同步CSDN博客 alwaysl7的博客

如果项目中遇到后台传给前台的json字符串命名方式不符合java的命名规范
如:

1
{"exp_value":"exp1","user_age":11,"user_name":"username1"}

javabean中是小驼峰命名:

1
2
3
4
5
private String userName;

private String expValue;

private int userAge;

关于FastJson属性别名的问题,网上很多文章都指出@JSONField(name = "***")必须要注解在setter和getter上面;

但是实际测试compile 'com.alibaba:fastjson:1.1.56'版本的FastJson发现@JSONField注解其实可以直接写到属性名上面,实例如下:

JavaBean

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
32
33
34
35
36
37
38
39
40
41
42
43
public class JsonTestBean {

@JSONField(name = "user_name")
private String userName;
@JSONField(name = "exp_value")
private String expValue;
@JSONField(name = "user_age")
private int userAge;


public String getExpValue() {
return expValue;
}

public void setExpValue(String expValue) {
this.expValue = expValue;
}

public int getUserAge() {
return userAge;
}

public void setUserAge(int userAge) {
this.userAge = userAge;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

@Override
public String toString() {
return "JsonTestBean{" +
"expValue='" + expValue + '\'' +
", userName='" + userName + '\'' +
", userAge=" + userAge +
'}';
}
}

Test方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

@org.junit.Test
public void jsonTest() {
JsonTestBean jsonTestBean = new JsonTestBean();
jsonTestBean.setUserName("username1");
jsonTestBean.setExpValue("exp1");
jsonTestBean.setUserAge(11);
System.out.println("bean->json : " + JsonUtils.toJson(jsonTestBean));

String jsonStr = "{\"exp_value\":\"exp2\",\"user_age\":22,\"user_name\":\"username2\"}";
JsonTestBean toBean = JsonUtils.toBean(jsonStr, JsonTestBean.class);
if (toBean != null) {
System.out.println("json-> bean : " + toBean.toString());
}
}

运行结果:

1
2
bean->json : {"exp_value":"exp1","user_age":11,"user_name":"username1"}
json-> bean : JsonTestBean{expValue='exp2', userName='username2', userAge=22}

可以发现@JSONField是可以放在属性上面的

后记:Android SDK更新了,但是build.gradle里面描述没有升级,运行Junit测试始终提示empty test suite 最后升级了gradle里面的版本,错误就解决了