Google Gson:POJO 和 JSON 的字段映射规则

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));
}

运行结果: 
这里写图片描述

猜你喜欢

转载自blog.csdn.net/suyimin2010/article/details/81230337
今日推荐