Episode ini membahas data binding dan JSON: proses serialisasi dan deserialisasi JSON di Java, library populer Jackson, Gson, dan JSON-B, mapping objek Java ke JSON dan sebaliknya, serta validasi data input dan error handling saat parsing.

JSON adalah bahasa pertukaran data paling umum di dunia modern. Hampir setiap API REST, message broker, dan penyimpanan data berbicara dalam format ini. Episode 9 membahas data binding dan JSON processing di Java — cara mengubah objek Java menjadi JSON dan sebaliknya.
Kalian akan mengenal tiga library populer: Jackson, Gson, dan JSON-B. Selain itu, kalian akan belajar memetakan objek dengan benar, memvalidasi data input, dan menangani error saat parsing agar aplikasi tetap stabil.
Serialisasi adalah proses mengubah objek Java menjadi string JSON. Deserialisasi adalah kebalikannya — mengubah string JSON menjadi objek Java.
objek Java -> serialisasi -> JSON -> deserialisasi -> objek JavaSemua contoh di episode ini memakai record Pengguna yang ringkas:
public record Pengguna(String nama, int umur) { }Jackson adalah library JSON paling populer dan default di Spring Boot. Tambahkan dependency lalu gunakan ObjectMapper:
mvn dependency:get -Dartifact=com.fasterxml.jackson.core:jackson-databind:2.17.2import com.fasterxml.jackson.databind.ObjectMapper;
public class DemoJackson {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(new Pengguna("Arman", 30));
System.out.println(json);
Pengguna hasil = mapper.readValue(json, Pengguna.class);
System.out.println(hasil.nama());
}
}mapper.writeValueAsString(pengguna) menghasilkan JSON, dan mapper.readValue(json, Pengguna.class) mengembalikannya menjadi objek.
Gson menawarkan API yang ringkas:
import com.google.gson.Gson;
public class DemoGson {
public static void main(String[] args) {
Gson gson = new Gson();
String json = gson.toJson(new Pengguna("Budi", 25));
System.out.println(json);
Pengguna hasil = gson.fromJson(json, Pengguna.class);
System.out.println(hasil.umur());
}
}gson.toJson(pengguna) dan gson.fromJson(json, Pengguna.class) memberikan data binding yang mudah.
JSON-B adalah spesifikasi standar Jakarta EE. Keunggulannya adalah portabilitas antar implementasi seperti Eclipse Yasson dan Apache Johnzon:
import jakarta.json.bind.Jsonb;
import jakarta.json.bind.JsonbBuilder;
public class DemoJsonb {
public static void main(String[] args) {
Jsonb jsonb = JsonbBuilder.create();
String json = jsonb.toJson(new Pengguna("Citra", 28));
System.out.println(json);
}
}Kadang nama field di JSON berbeda dari field Java. Gunakan anotasi — Jackson memakai @JsonProperty:
import com.fasterxml.jackson.annotation.JsonProperty;
public class Produk {
@JsonProperty("nama_produk")
private String nama;
@JsonProperty("harga_jual")
private double harga;
}Validasi data setelah deserialisasi dengan Jakarta Bean Validation:
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Min;
public class OrderRequest {
@NotBlank
private String customerId;
@Min(1)
private int jumlah;
public String getCustomerId() { return customerId; }
public int getJumlah() { return jumlah; }
}JSON yang tidak valid atau field yang tidak cocok akan memicu exception. Tangani dengan benar:
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.core.JsonProcessingException;
public class DemoError {
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
String jsonBuruk = "{\"nama\":";
try {
Pengguna hasil = mapper.readValue(jsonBuruk, Pengguna.class);
System.out.println(hasil.nama());
} catch (JsonProcessingException e) {
System.out.println("Gagal parsing: " + e.getMessage());
}
}
}JsonProcessingException adalah exception khusus Jackson untuk kesalahan parsing. Gson memakai JsonSyntaxException, dan JSON-B memakai JsonbException. Jangan pernah menganggap JSON dari luar sudah benar — validasi dan tangkap exception di lapisan yang tepat.
Episode 9 mengajarkan data binding dan JSON: memahami serialisasi dan deserialisasi, menggunakan Jackson, Gson, dan JSON-B, memetakan field dengan anotasi, memvalidasi input, serta menangani error parsing.
Inti yang harus dibawa pulang:
gson.toJson dan fromJson.@JsonProperty memetakan nama field yang berbeda.Di episode 10 selanjutnya kita akan membahas database access dan persistence — JDBC dasar dengan koneksi, statement, dan result set, connection pooling dan resource cleanup, pengenalan JPA dan Hibernate sebagai ORM modern, entity mapping, repository pattern, dan transaction management. Saatnya menyimpan data secara persisten!