Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Định nghĩa quy ước đặt tên trường JSON trong Java bằng Gson

FieldNamingPolicy có thể dùng để định nghĩa một số quy ước đặt tên chuẩn cho tên trường JSON và có thể dùng kết hợp với GsonBuilder để cấu hình instance Gson dịch tên trường Java sang tên trường JSON mong muốn. Có thể dùng phương thức setFieldNamingPolicy() của GsonBuilder để cấu hình chiến lược đặt tên cụ thể cho trường của đối tượng trong quá trình serialization và deserialization.

Gson hỗ trợ các yêu cầu đặt tên trường với các chính sách sau:

  • FieldNamingPolicy.IDENTITY: Sử dụng chính xác tên như model Java khi serialize.
  • FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES: Chuyển tên trường Java từ camelCase sang chữ thường, các từ phân cách bằng dấu gạch dưới (_).
  • FieldNamingPolicy.LOWER_CASE_WITH_DASHES: Chuyển tên trường Java từ camelCase sang chữ thường, các từ phân cách bằng dấu gạch ngang (-).
  • FieldNamingPolicy.UPPER_CAMEL_CASE: Đảm bảo chữ cái đầu của tên trường Java được viết hoa khi serialize sang JSON.
  • FieldNamingPolicy.UPPER_CAMEL_CASE_WITH_SPACES: Viết hoa chữ cái đầu và phân cách các từ bằng dấu cách.

Ví dụ minh họa

import com.google.gson.*;
import java.sql.Date;
import java.time.LocalDate;

public class FieldNamingPolicyTest {
    public static void main(String[] args) {
        Gson gson = new GsonBuilder()
            .setPrettyPrinting()
            .setDateFormat("yyyy-MM-dd")
            .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES).create();
        
        Person p = new Person("Raja", "Ramesh", 30, Date.valueOf(LocalDate.of(1988, 1, 1)));
        String jsonStr = gson.toJson(p);
        System.out.println(jsonStr);
    }
}

// Lớp Person
class Person {
    private String fistName;
    private String lastName;
    private int _age;
    private Date dateOfBirth;
    
    public Person(String fistName, String lastName, int _age, Date dateOfBirth) {
        super();
        this.fistName = fistName;
        this.lastName = lastName;
        this._age = _age;
        this.dateOfBirth = dateOfBirth;
    }
}

Kết quả đầu ra

{
    "fist-name": "Raja",
    "last-name": "Ramesh",
    "_age": 30,
    "date-of-birth": "1988-01-01"
}

Mẹo: Có thể tự định nghĩa FieldNamingStrategy tùy chỉnh bằng cách implement interface FieldNamingStrategy nếu các policy có sẵn không đáp ứng nhu cầu.