Error Handling & Custom Error Page
Penjelasan
Secara default, Play menampilkan halaman error bawaan untuk kasus seperti 404 (Not Found) dan 500 (Internal Server Error) — cukup informatif untuk development tapi biasanya perlu diganti dengan tampilan yang sesuai branding aplikasi di production. Kustomisasi dilakukan dengan membuat class yang meng-extend `HttpErrorHandler`, mengimplementasikan `onClientError` (untuk error 4xx seperti 404/400) dan `onServerError` (untuk error 5xx/exception tak tertangani). Class ErrorHandler kustom didaftarkan lewat binding di `application.conf` dengan key `play.http.errorHandler`, menunjuk ke fully-qualified class name-nya. Dengan begini, semua error yang tidak tertangani secara eksplisit di controller akan otomatis melewati handler ini, memberikan tampilan error yang konsisten di seluruh aplikasi.
Contoh Konsep
import play.api.http.HttpErrorHandler
import play.api.mvc._
import scala.concurrent._
import javax.inject._
@Singleton
class CustomErrorHandler @Inject()(implicit ec: ExecutionContext) extends HttpErrorHandler {
def onClientError(request: RequestHeader, statusCode: Int, message: String): Future[Result] = {
Future.successful(
Status(statusCode)(s"Oops, error $statusCode: $message")
)
}
def onServerError(request: RequestHeader, exception: Throwable): Future[Result] = {
Future.successful(
InternalServerError(s"Terjadi kesalahan server: ${exception.getMessage}")
)
}
}
// application.conf
// play.http.errorHandler = "CustomErrorHandler"
Praktikum
Modifikasi onClientError di atas agar khusus status 404 mengembalikan pesan "Halaman tidak ditemukan" dan status lain tetap menampilkan message asli.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Jangan bocorkan detail exception mentah (stack trace, pesan internal) ke response production di onServerError — log detailnya di server, tapi kirim pesan generik yang aman ke klien.