Spring Boot: Sesuaikan Halaman Kesalahan Label Putih

1. Ikhtisar

Pada artikel ini, kita akan melihat cara menonaktifkan dan menyesuaikan halaman kesalahan default untuk aplikasi Spring Boot karena penanganan kesalahan yang tepat menggambarkan profesionalisme dan kualitas kerja.

2. Menonaktifkan Halaman Kesalahan Label Putih

Pertama, mari kita lihat bagaimana kita dapat menonaktifkan halaman kesalahan label putih sepenuhnya, dengan mengatur properti server.error.whitelabel.enabled menjadi false:

server.error.whitelabel.enabled=false

Menambahkan entri ini ke file application.properties akan menonaktifkan halaman kesalahan dan menampilkan halaman ringkas yang berasal dari wadah aplikasi yang mendasarinya, misalnya, Tomcat.

Kita dapat mencapai hasil yang sama dengan mengecualikan kacang ErrorMvcAutoConfiguration . Kita dapat melakukan ini dengan menambahkan entri ini ke file properti:

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration #for Spring Boot 2.0 #spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration

Atau dengan menambahkan anotasi ini ke kelas utama:

@EnableAutoConfiguration(exclude = {ErrorMvcAutoConfiguration.class})

Semua metode yang disebutkan di atas akan menonaktifkan halaman kesalahan label putih. Itu membuat kita dengan pertanyaan tentang siapa yang sebenarnya menangani kesalahan itu?

Seperti yang disebutkan di atas, biasanya ini adalah wadah aplikasi yang mendasarinya. Hal baiknya adalah kami dapat menyesuaikan lebih lanjut hal-hal dengan menampilkan halaman kesalahan khusus kami alih-alih semua default - ini adalah fokus dari bagian selanjutnya.

3. Menampilkan Halaman Kesalahan Kustom

Pertama-tama kita perlu membuat halaman kesalahan HTML kustom.

Kami akan menyimpan file sebagai error.html karena kami menggunakan mesin template Thymeleaf :

Our Engineers are on it

Go Home

Jika kita menyimpan file ini di resources / templatesdirektori, itu akan secara otomatis diambil oleh BasicErrorController Spring Boot default .

Ini semua yang kami butuhkan untuk menampilkan halaman kesalahan kustom kami. Dengan beberapa gaya, sekarang kita akan memiliki halaman kesalahan yang jauh lebih bagus untuk pengguna kita:

Kita bisa lebih spesifik dengan menamai file dengan kode status HTTP yang kita inginkan, misalnya menyimpan file sebagai 404.html di resource / templates / error artinya akan digunakan secara eksplisit untuk error 404.

3.1. Sebuah ErrorController Kustom

Batasannya sejauh ini adalah kami tidak dapat menjalankan logika kustom saat terjadi kesalahan. Untuk mencapai itu, kita harus membuat kacang pengontrol kesalahan yang akan menggantikan kacang default.

Untuk ini, kita harus membuat kelas yang mengimplementasikan antarmuka ErrorController dan mengganti metode getErrorPath () untuk mengembalikan jalur kustom yang akan dipanggil saat terjadi kesalahan.

Namun, memulai versi 2.3.x, Spring Boot tidak lagi menggunakan metode ini, dan properti server.error.path harus digunakan sebagai gantinya untuk menentukan jalur kustom.

Tetapi karena ini masih merupakan bagian dari antarmuka ErrorController dan belum dihapus seluruhnya, kita perlu menggantinya atau kompiler akan mengeluh. Untuk menghindari masalah di sini, kami mengembalikan null karena tetap akan diabaikan:

@Controller public class MyErrorController implements ErrorController { @RequestMapping("/error") public String handleError() { //do something like logging return "error"; } @Override public String getErrorPath() { return null; } }

Dalam cuplikan di atas, kami juga menganotasi kelas dengan @Controller dan membuat pemetaan untuk jalur yang ditetapkan sebagai properti server.error.path:

server.error.path=/error

Dengan cara ini pengontrol dapat menangani panggilan ke jalur / error .

Di handleError () , kami mengembalikan halaman kesalahan kustom yang kami buat sebelumnya. Jika kami memicu kesalahan 404 sekarang, halaman kustom kami yang akan ditampilkan.

Mari kita tingkatkan lebih lanjut handleError () untuk menampilkan halaman kesalahan tertentu untuk jenis kesalahan yang berbeda.

Misalnya, kita dapat memiliki halaman yang dirancang dengan baik khusus untuk jenis kesalahan 404 dan 500. Kemudian kita dapat menggunakan kode status HTTP dari kesalahan untuk menentukan halaman kesalahan yang cocok untuk ditampilkan:

@RequestMapping("/error") public String handleError(HttpServletRequest request) { Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE); if (status != null) { Integer statusCode = Integer.valueOf(status.toString()); if(statusCode == HttpStatus.NOT_FOUND.value()) { return "error-404"; } else if(statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value()) { return "error-500"; } } return "error"; }

Kemudian, untuk error 404, misalnya, kita akan melihat halaman error-404.html :

4. Kesimpulan

Dengan informasi ini, kami sekarang dapat menangani kesalahan dengan lebih elegan dan menampilkan halaman estetika kepada pengguna kami.

Seperti biasa, kode sumber lengkap tersedia di Github.