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")