GsonBuilder 类的 setFieldNamingPolicy 和 setFieldNamingStrategy 方法可以定义 POJO 和 JSON 的字段映射规则
1 setFieldNamingPolicy
示例
POJO
public class User {
private String name;
private String phoneNumber;
public User() {}
public User(String name, String phoneNumber) {
this.name = name;
this.phoneNumber = phoneNumber;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
@Override
public String toString() {
return "User [name=" + name + ", phoneNumber=" + phoneNumber + "]";
}
}
- 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
测试代码:
@Test
public void test() throws IOException {
User user = new User("UserX", "160");
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.IDENTITY)
.create();
System.out.println(gson.toJson(user));
String userStr = "{\"name\":\"User1\",\"phoneNumber\":\"161\"}";
System.out.println(gson.fromJson(userStr, User.class));
gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES)
.create();
System.out.println(gson.toJson(user));
userStr = "{\"name\":\"User1\",\"phone-number\":\"162\"}";
System.out.println(gson.fromJson(userStr, User.class));
gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.create();
System.out.println(gson.toJson(user));
userStr = "{\"name\":\"User1\",\"phone_number\":\"163\"}";
System.out.println(gson.fromJson(userStr, User.class));
gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
.create();
System.out.println(gson.toJson(user));
userStr = "{\"name\":\"User1\",\"PhoneNumber\":\"164\"}";
System.out.println(gson.fromJson(userStr, User.class));
gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE_WITH_SPACES)
.create();
System.out.println(gson.toJson(user));
userStr = "{\"name\":\"User1\",\"Phone Number\":\"165\"}";
System.out.println(gson.fromJson(userStr, User.class));
}
- 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
运行结果:
2 setFieldNamingStrategy
测试代码:
@Test
public void test() throws IOException {
User user = new User("UserX", "160");
Gson gson = new GsonBuilder()
.setFieldNamingStrategy(new FieldNamingStrategy() {
public String translateName(Field arg0) {
if (arg0.getName().equals("name")) {
return "custom-name";
} else if (arg0.getName().equals("phoneNumber")) {
return "custom-phone";
}
return null;
}
})
.create();
System.out.println(gson.toJson(user));
String userStr = "{\"custom-name\":\"userN\",\"custom-phone\":\"168\"}";
System.out.println(gson.fromJson(userStr, User.class));
}
运行结果: