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

Enum FieldNamingPolicy trong Gson (Java)

Gson cung cấp sẵn 5 naming policy trong enum FieldNamingPolicy (implements FieldNamingStrategy). Cấu hình qua GsonBuilder.setFieldNamingPolicy().

Các Policy Constants

Policy Mô tả Ví dụ: firstName →
IDENTITY Giữ nguyên tên field (default) firstName
LOWER_CASE_WITH_DASHES Lowercase + dash separator first-name
LOWER_CASE_WITH_UNDERSCORES Lowercase + underscore (snake_case) first_name
UPPER_CAMEL_CASE Capitalize first letter (PascalCase) FirstName
UPPER_CAMEL_CASE_WITH_SPACES PascalCase + space separator First Name

Cú pháp

public enum FieldNamingPolicy extends Enum<FieldNamingPolicy> implements FieldNamingStrategy
GsonBuilder.setFieldNamingPolicy(FieldNamingPolicy policy)

Ví dụ demo tất cả policy

import com.google.gson.*;
import com.google.gson.FieldNamingPolicy;

public class GsonFieldNamingPolicyTest {
    public static void main(String[] args) {
        Employee emp = new Employee();
        emp.setEmpId(115);
        emp.setFirstName("Raja");
        emp.setLastName("Ramesh");
        
        GsonBuilder builder = new GsonBuilder();
        
        testPolicy(builder, FieldNamingPolicy.LOWER_CASE_WITH_DASHES, emp);
        testPolicy(builder, FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES, emp);
        testPolicy(builder, FieldNamingPolicy.UPPER_CAMEL_CASE, emp);
        testPolicy(builder, FieldNamingPolicy.UPPER_CAMEL_CASE_WITH_SPACES, emp);
        testPolicy(builder, FieldNamingPolicy.IDENTITY, emp);
    }
    
    static void testPolicy(GsonBuilder builder, FieldNamingPolicy policy, Employee emp) {
        Gson gson = builder.setFieldNamingPolicy(policy).create();
        System.out.println(policy.name() + ": " + gson.toJson(emp));
    }
}

class Employee {
    private int empId;
    private String firstName, lastName;
    // getters/setters...
}

Output

LOWER_CASE_WITH_DASHES: {"emp-id":115,"first-name":"Raja","last-name":"Ramesh"}
LOWER_CASE_WITH_UNDERSCORES: {"emp_id":115,"first_name":"Raja","last_name":"Ramesh"}
UPPER_CAMEL_CASE: {"EmpId":115,"FirstName":"Raja","LastName":"Ramesh"}
UPPER_CAMEL_CASE_WITH_SPACES: {"Emp Id":115,"First Name":"Raja","Last Name":"Ramesh"}
IDENTITY: {"empId":115,"firstName":"Raja","lastName":"Ramesh"}

Khi nào dùng policy nào?

  • LOWER_CASE_WITH_UNDERSCORES (snake_case): Chuẩn REST API phổ biến, Python, Go, database column.
  • LOWER_CASE_WITH_DASHES (kebab-case): URL, CSS, một số API legacy.
  • UPPER_CAMEL_CASE (PascalCase): .NET/C# convention, một số enterprise API.
  • IDENTITY: Java convention, internal service, khi client cũng dùng Java.

Jackson Equivalent

ObjectMapper mapper = new ObjectMapper();
// Built-in
mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
mapper.setPropertyNamingStrategy(PropertyNamingStrategies.KEBAB_CASE);
mapper.setPropertyNamingStrategy(PropertyNamingStrategies.UPPER_CAMEL_CASE);
// Custom
mapper.setPropertyNamingStrategy(new PropertyNamingStrategy() { ... });

Annotation Override

Cả Gson và Jackson đều cho phép override per-field qua annotation:

  • Gson: @SerializedName("custom_name")
  • Jackson: @JsonProperty("custom_name")