Gson - Adaptor Jenis Kustom
Gson melakukan serialisasi / deserialisasi objek menggunakan adaptor bawaannya. Ini juga mendukung adaptor khusus. Mari kita bahas bagaimana Anda dapat membuat adaptor khusus dan bagaimana Anda dapat menggunakannya.
Buat Adaptor Kustom
Buat adaptor kustom dengan memperluas TypeAdapterkelas dan meneruskannya jenis objek yang ditargetkan. Timparead dan write metode untuk melakukan deserialisasi kustom dan serialisasi masing-masing.
class StudentAdapter extends TypeAdapter<Student> {
@Override
public Student read(JsonReader reader) throws IOException {
...
}
@Override
public void write(JsonWriter writer, Student student) throws IOException {
}
}
Daftarkan Adaptor Kustom
Daftarkan adaptor khusus menggunakan GsonBuilder dan buat instance Gson menggunakan GsonBuilder.
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Student.class, new StudentAdapter());
Gson gson = builder.create();
Gunakan Adaptor
Gson sekarang akan menggunakan adaptor khusus untuk mengonversi teks Json menjadi objek dan sebaliknya.
String jsonString = "{\"name\":\"Mahesh\", \"rollNo\":1}";
Student student = gson.fromJson(jsonString, Student.class);
System.out.println(student);
jsonString = gson.toJson(student);
System.out.println(jsonString);
Contoh
Mari kita lihat contoh adaptor tipe kustom beraksi. Buat file kelas Java bernamaGsonTester di C: \> GSON_WORKSPACE.
File − GsonTester.java
import java.io.IOException;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;
public class GsonTester {
public static void main(String args[]) {
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Student.class, new StudentAdapter());
builder.setPrettyPrinting();
Gson gson = builder.create();
String jsonString = "{\"name\":\"Mahesh\", \"rollNo\":1}";
Student student = gson.fromJson(jsonString, Student.class);
System.out.println(student);
jsonString = gson.toJson(student);
System.out.println(jsonString);
}
}
class StudentAdapter extends TypeAdapter<Student> {
@Override
public Student read(JsonReader reader) throws IOException {
Student student = new Student();
reader.beginObject();
String fieldname = null;
while (reader.hasNext()) {
JsonToken token = reader.peek();
if (token.equals(JsonToken.NAME)) {
//get the current token
fieldname = reader.nextName();
}
if ("name".equals(fieldname)) {
//move to next token
token = reader.peek();
student.setName(reader.nextString());
}
if("rollNo".equals(fieldname)) {
//move to next token
token = reader.peek();
student.setRollNo(reader.nextInt());
}
}
reader.endObject();
return student;
}
@Override
public void write(JsonWriter writer, Student student) throws IOException {
writer.beginObject();
writer.name("name");
writer.value(student.getName());
writer.name("rollNo");
writer.value(student.getRollNo());
writer.endObject();
}
}
class Student {
private int rollNo;
private String name;
public int getRollNo() {
return rollNo;
}
public void setRollNo(int rollNo) {
this.rollNo = rollNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return "Student[ name = "+name+", roll no: "+rollNo+ "]";
}
}
Verifikasi hasilnya
Kompilasi kelas menggunakan javac kompiler sebagai berikut -
C:\GSON_WORKSPACE>javac GsonTester.java
Sekarang jalankan GsonTester untuk melihat hasilnya -
C:\GSON_WORKSPACE>java GsonTester
Verifikasi hasilnya.
Student[ name = Mahesh, roll no: 1]
{
"name": "Mahesh",
"rollNo": 1
}