JSON Handling (Play JSON, Reads/Writes)
Penjelasan
Play JSON adalah library bawaan untuk bekerja dengan JSON secara type-safe. `Writes[T]` mendefinisikan cara mengubah objek Scala menjadi `JsValue`, sedangkan `Reads[T]` mendefinisikan cara memvalidasi dan mengurai `JsValue` menjadi objek Scala. Untuk case class sederhana, keduanya bisa digenerate otomatis lewat macro `Json.format[T]` (gabungan Reads dan Writes). Di controller, request JSON diterima lewat body parser `parse.json`, lalu `request.body.validate[T]` mengembalikan `JsResult[T]` yang bisa berupa `JsSuccess` (berhasil) atau `JsError` (gagal validasi/parsing) — pola ini mirip Form binding tapi untuk JSON. Response JSON dikembalikan cukup dengan `Ok(Json.toJson(data))`.
Contoh Konsep
import play.api.libs.json._
import play.api.mvc._
case class Produk(id: Long, nama: String, harga: Int)
object Produk {
implicit val format: Format[Produk] = Json.format[Produk]
}
def terimaJson(): Action[JsValue] = Action(parse.json) { request =>
request.body.validate[Produk] match {
case JsSuccess(produk, _) => Ok(Json.toJson(produk))
case JsError(errors) => BadRequest(Json.obj("error" -> errors.toString))
}
}
Praktikum
Buat case class Alamat(jalan: String, kota: String) dengan Json.format otomatis, lalu Action yang menerima JSON Alamat dan mengembalikannya kembali sebagai JSON dengan tambahan field "diterima": true.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Jangan lupa import play.api.libs.json._ dan pastikan implicit Format/Reads/Writes berada dalam scope saat memanggil Json.toJson atau validate — error compile paling umum di sini adalah implicit yang tidak ditemukan.