Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธีนำ Custom FieldNamingStrategy ไปใช้ด้วย Gson ใน Java

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