Study
Play Framework

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.

Editor Latihan

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.