Request & Response (Parsing Body, Header)
Penjelasan
Setiap `Action` yang menerima parameter `request: Request[AnyContent]` bisa mengakses berbagai bagian dari HTTP request: `request.headers.get("nama-header")` untuk header, `request.queryString` atau helper `getQueryString` untuk query parameter di URL, dan `request.body` untuk isi body request. Tipe body ditentukan lewat body parser — default `AnyContent` bisa diubah jadi bentuk lebih spesifik seperti `parse.json` atau `parse.text`. Untuk response, selain status code (Ok, BadRequest, dst), header response tambahan bisa disisipkan lewat `.withHeaders(...)`, dan cookie lewat `.withCookies(...)`. Play juga otomatis menangani content negotiation dasar berdasarkan header Accept saat memungkinkan.
Contoh Konsep
import play.api.mvc._
def infoRequest(): Action[AnyContent] = Action { request =>
val userAgent = request.headers.get("User-Agent").getOrElse("tidak diketahui")
val halaman = request.getQueryString("halaman").getOrElse("1")
Ok(s"User-Agent: $userAgent, Halaman: $halaman")
.withHeaders("X-Custom-Header" -> "nilai-custom")
}
Praktikum
Buat Action yang membaca query parameter "cari" dari URL dan mengembalikan pesan "Mencari: <nilai>" atau "Tidak ada kata kunci" jika parameter tidak ada.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Gunakan getOrElse saat membaca header atau query string opsional — jangan asumsikan sebuah header/parameter selalu ada, karena request.headers.get dan getQueryString mengembalikan Option.