Cùng tìm hiểu về Gson Builder - Naming Polices

Mở bài

Chắc hẳn ai trong chúng ra nếu đang lập trình Java hoặc Android thì đều biết Gson là một thư viện rất nổi tiếng của Google dùng để chuyển dữ liệu từ dạng JSON sang Java Object. Gson là một thư viện cực kì dễ sử dụng và có thể tuỳ chỉnh rất nhiều thứ. Trong bài viết này, chúng ta sẽ cùng tìm hiểu về các nguyên tắc đặt tên biến (Naming Policies) sử dụng GsonBuilder nhé!

GsonBuilder

Để sử dụng Gson ta thường sử dụng hàm Gson gson = new Gson();. Phương thức này sẽ trả về một đối tượng gson với các cài đặt mặc định. Để có thể thay đổi những cài đặt mặc định này ta sẽ sử dụng GsonBuilder:

// Default configuration
Gson gson = new Gson();

// Using GsonBuilder
GsonBuilder gsonBuilder = new GsonBuilder();  
Gson gson = gsonBuilder.create();  

Lớp GsonBuilder có phương thức .create() sẽ trả về cho ta đối tượng Gson.

Nguyên tắc đặt tên

Theo mặc định, Gson sẽ tự động convert các tên data trong JSON trùng khớp với tên biến của Java Object. Và nếu tên biến Java khác với tên trong đoạn JSON thì sao? Ta sẽ sử dụng @SerializedName để cho Gson biết được biến này của Java Object sẽ ứng với trường nào trong JSON. Tuy nhiên, trong trường hợp cách đặt tên của JSON khác với cách đặt tên của Java Object, khi đó ta sẽ phải sử dụng rất nhiều @SerializedName cho toàn bộ các biến trong file Java.

Bởi vậy, Gson đã cho ta một cài đặt để có thể chỉnh sửa nguyên tắc đặt tên này gọi là FieldNamingPolicy. Để giải thích rõ hơn ta sẽ sử dụng một lớp UserNaming với các trường như sau:

public class UserNaming {  
    String Name;
    String email_of_developer;
    boolean isDeveloper;
    int _ageOfDeveloper;
}

Mỗi biến trong class được đặt tên theo các nguyên tắc đặt tên khác nhau như đầu tiên là viết hoa ở đầu, thứ 2 là kiểu gạch chân _ , thứ 3 là kiểu Camel Case, và cuối cùng là kiểu Camel Case với gạch chân _ ở đầu. Ta sẽ sử dụng FieldNamingPolicy để convert nó về dạng JSON xem có gì khác nhau nhé.

FieldNamingPolicy - IDENTITY

IDENTITY sẽ xác định chính xác tên trong lớp Java sẽ cùng là tên của JSON, đây cũng là cài đặt mặc định cùa Gson khi ta gọi new Gson()

GsonBuilder gsonBuilder = new GsonBuilder();  
gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.IDENTITY);  
Gson gson = gsonBuilder.create();

UserNaming user = new UserNaming("Norman", "[email protected]", true, 26);  
String usersJson = gson.toJson(user);  

Đoạn JSON sẽ là:

{
  "Name": "Norman",
  "_ageOfDeveloper": 26,
  "email_of_developer": "[email protected]",
  "isDeveloper": true
}

FieldNamingPolicy - LOWER_CASE_WITH_UNDERSCORES

Cái tên nói lên tất cả, hãy xem đoạn code sau, đây là trường hợp ta rất hay sử dụng

GsonBuilder gsonBuilder = new GsonBuilder();  
gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);  
Gson gson = gsonBuilder.create();

UserNaming user = new UserNaming("Norman", "[email protected]", true, 26);  
String usersJson = gson.toJson(user);

LOWER_CASE_WITH_UNDERSCORES sẽ thay đổi các chữ cái viết hoa thành chữ thường và thêm _ vào trước nó.

{
  "name": "Norman",
  "_age_of_developer": 26,
  "email_of_developer": "[email protected]",
  "is_developer": true
}

Như ta thấy thì isDeveloper_ageOfDeveloper đã bị thay đổi.

FieldNamingPolicy - LOWER_CASE_WITH_DASHES

Tương tự, với đoạn code sau:

GsonBuilder gsonBuilder = new GsonBuilder();  
gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES);  
Gson gson = gsonBuilder.create();

UserNaming user = new UserNaming("Norman", "[email protected]", true, 26);  
String usersJson = gson.toJson(user); 

thì kết quả sẽ là

{
  "name": "Norman",
  "_age-of-developer": 26,
  "email_of_developer": "[email protected]",
  "is-developer": true
}

FieldNamingPolicy - UPPER_CAMEL_CASE

Tiếp theo là UPPER_CAMEL_CASE sẽ làm cho chữ cái đầu tiên viết hoa:

GsonBuilder gsonBuilder = new GsonBuilder();  
gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE);  
Gson gson = gsonBuilder.create();

UserNaming user = new UserNaming("Norman", "[email protected]", true, 26);  
String usersJson = gson.toJson(user);  

Kết quả là:

{
  "Name": "Norman",
  "_AgeOfDeveloper": 26,
  "Email_of_developer": "[email protected]",
  "IsDeveloper": true
}

FieldNamingPolicy - UPPER_CAMEL_CASE_WITH_SPACES

UPPER_CAMEL_CASE_WITH_SPACES khá giống với UPPER_CAMEL_CASE, khác là ở giữa có dấu cách

GsonBuilder gsonBuilder = new GsonBuilder();  
gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE_WITH_SPACES);  
Gson gson = gsonBuilder.create();

UserNaming user = new UserNaming("Norman", "[email protected]", true, 26);  
String usersJson = gson.toJson(user);  

Kết quả là:

{
  "Name": "Norman",
  "_Age Of Developer": 26,
  "Email_of_developer": "[email protected]",
  "Is Developer": true
}

Kết

Trên đây là các FieldNamingPolicy của Gson định nghĩa, gần như đầy đủ hết các nguyên tắc đặt tên hay sử dụng rồi.

Ở bài viết sau mình sẽ giới thiệu cách Custom các FieldNaming này và sử dụng nó với @SerializedName.

Cảm ơn các bạn đã theo dõi, hy vọng bài viết sẽ hữu ích với bạn~

Nguồn tham khảo: https://futurestud.io/tutorials/gson-builder-basics-naming-policies