Cùng tìm hiểu về Gson Builder - Naming Polices
Bài đăng này đã không được cập nhật trong 7 năm
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", "norman@futurestud.io", true, 26);
String usersJson = gson.toJson(user);
Đoạn JSON sẽ là:
{
"Name": "Norman",
"_ageOfDeveloper": 26,
"email_of_developer": "norman@futurestud.io",
"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", "norman@futurestud.io", 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": "norman@futurestud.io",
"is_developer": true
}
Như ta thấy thì isDeveloper
và _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", "norman@futurestud.io", true, 26);
String usersJson = gson.toJson(user);
thì kết quả sẽ là
{
"name": "Norman",
"_age-of-developer": 26,
"email_of_developer": "norman@futurestud.io",
"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", "norman@futurestud.io", true, 26);
String usersJson = gson.toJson(user);
Kết quả là:
{
"Name": "Norman",
"_AgeOfDeveloper": 26,
"Email_of_developer": "norman@futurestud.io",
"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", "norman@futurestud.io", true, 26);
String usersJson = gson.toJson(user);
Kết quả là:
{
"Name": "Norman",
"_Age Of Developer": 26,
"Email_of_developer": "norman@futurestud.io",
"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
All rights reserved