FieldNamingStrategy เป็นกลไกสำหรับให้ custom field naming ใน Gson อนุญาตให้ client code แปลชื่อฟิลด์เป็น convention เฉพาะที่ไม่รองรับโดยกฎการประกาศ Java field ปกติ เมธอด translateName() จะเพิ่ม prefix "pre_" ทุกชื่อฟิลด์
ตัวอย่างการใช้งาน
import java.lang.reflect.Field;
import com.google.gson.*;
public class GsonFieldNamingStrategyTest {
public static void main(String[] args) {
Employee emp = new Employee();
emp.setEmpId(115);
emp.setFirstName("Adithya");
emp.setLastName("Jai");
CustomFieldNamingStrategy customFieldNamingStrategy = new CustomFieldNamingStrategy();
GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.setFieldNamingStrategy(customFieldNamingStrategy).create();
String result = gson.toJson(emp);
System.out.println(result);
}
// Custom FieldNamingStrategy
private static class CustomFieldNamingStrategy implements FieldNamingStrategy {
@Override
public String translateName(Field field) {
return "pre_" + field.getName();
}
}
}
// Employee class
class Employee {
private int empId;
private String firstName;
private String lastName;
// getters/setters...
public int getEmpId() { return empId; }
public void setEmpId(int empId) { this.empId = empId; }
public String getFirstName() { return firstName; }
public void setFirstName(String firstName) { this.firstName = firstName; }
public String getLastName() { return lastName; }
public void setLastName(String lastName) { this.lastName = lastName; }
}
ผลลัพธ์ (Output)
{"pre_empId":115,"pre_firstName":"Adithya","pre_lastName":"Jai"}
คำอธิบาย
CustomFieldNamingStrategy implements FieldNamingStrategy interface และ override translateName() โดยเพิ่ม prefix "pre_" ให้ทุกชื่อฟิลด์ ทำให้ JSON output มี key เป็น pre_empId, pre_firstName, pre_lastName
FieldNamingStrategy Interface
public interface FieldNamingStrategy {
String translateName(Field field);
}
รับ java.lang.reflect.Field คืนค่า string ที่จะใช้เป็น JSON key
Built-in Strategies ใน Gson (FieldNamingPolicy enum)
- IDENTITY - ใช้ชื่อฟิลด์ as-is (default)
- LOWER_CASE_WITH_DASHES - camelCase → lower-case-with-dashes (first-name)
- LOWER_CASE_WITH_UNDERSCORES - camelCase → lower_case_with_underscores (first_name)
- UPPER_CAMEL_CASE - ตัวแรกใหญ่ (FirstName)
- UPPER_CAMEL_CASE_WITH_SPACES - ตัวแรกใหญ่ คั่น space (First Name)
การใช้ Built-in Policy
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.create();
กรณีการใช้งาน Custom Strategy
- Legacy system integration - ต้องการ naming convention เฉพาะ
- Company standards - บริษัทมี naming convention ของตัวเอง
- Prefix/Suffix - เพิ่ม prefix/suffix ตาม business logic
- Translation - แปลชื่อฟิลด์เป็นภาษาอื่น
สรุป
FieldNamingStrategy ให้การควบคุม JSON field naming อย่างเต็มที่ ผ่าน custom implementation หรือ built-in policies ช่วยให้ JSON output ตรงตาม convention ที่ต้องการโดยไม่ต้องเปลี่ยน Java field names