Spring Boot: Sesuaikan Halaman Ralat Whitelabel

1. Gambaran keseluruhan

Dalam artikel ini, kita akan melihat cara menonaktifkan dan menyesuaikan halaman ralat lalai untuk aplikasi Spring Boot kerana pengendalian ralat yang tepat menggambarkan profesionalisme dan pekerjaan yang berkualiti.

2. Melumpuhkan Halaman Ralat Whitelabel

Pertama, mari kita lihat bagaimana kita boleh mematikan halaman ralat label putih sepenuhnya, dengan menetapkan properti server.error.whitelabel.enabled ke false:

server.error.whitelabel.enabled=false

Menambah entri ini ke file application.properties akan mematikan halaman ralat dan menunjukkan halaman ringkas yang berasal dari wadah aplikasi yang mendasari, misalnya, Tomcat.

Kita boleh mencapai hasil yang sama dengan mengecualikan kacang ErrorMvcAutoConfiguration . Kita boleh melakukannya dengan menambahkan entri ini ke fail sifat:

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 kaedah yang disebutkan di atas akan mematikan halaman kesalahan label putih. Itu meninggalkan kita dengan persoalan siapa sebenarnya yang menangani kesalahan itu?

Seperti yang disebutkan di atas, biasanya merupakan wadah aplikasi yang mendasari. Perkara yang baik adalah kita dapat menyesuaikan lebih banyak perkara dengan menunjukkan halaman ralat tersuai kita dan bukannya semua lalai - ini adalah fokus bahagian seterusnya.

3. Memaparkan Halaman Ralat Tersuai

Mula-mula kita perlu membuat halaman ralat HTML tersuai.

Kami akan menyimpan fail sebagai error.html kerana kami menggunakan mesin templat Thymeleaf :

Our Engineers are on it

Go Home

Sekiranya kita menyimpan fail ini dalam sumber / templatdirektori, secara automatik akan diambil oleh BasicErrorController Spring Boot lalai .

Ini semua yang kami perlukan untuk memaparkan halaman kesalahan tersuai kami Dengan beberapa gaya, kini kami akan mempunyai halaman ralat yang lebih bagus untuk pengguna kami:

Kita dapat menjadi lebih spesifik dengan menamakan fail dengan kod status HTTP yang kita inginkan digunakan, misalnya menyimpan fail sebagai 404.html dalam sumber / templat / ralat bermaksud ia akan digunakan secara eksplisit untuk kesalahan 404.

3.1. Pengawal Ralat Tersuai

Batasannya sejauh ini adalah bahawa kita tidak dapat menjalankan logik tersuai ketika kesalahan berlaku. Untuk mencapainya, kita harus membuat kacang pengawal ralat yang akan menggantikan yang lalai.

Untuk ini, kita harus membuat kelas yang menerapkan antara muka ErrorController dan mengganti kaedah getErrorPath () untuk mengembalikan jalan khusus untuk dipanggil ketika ralat berlaku.

Walau bagaimanapun, mulai versi 2.3.x, Spring Boot telah menghentikan kaedah ini, dan properti.error.path properti harus digunakan sebagai gantinya untuk menentukan jalan khusus.

Tetapi kerana ia masih merupakan sebahagian daripada antara muka ErrorController dan belum dikeluarkan sepenuhnya, kita perlu menimpanya atau tidak, penyusun akan mengeluh. Untuk mengelakkan masalah di sini, kami mengembalikan nol kerana 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 coretan di atas, kami juga memberi anotasi kelas dengan @Controller dan membuat pemetaan untuk jalan yang ditentukan sebagai pelayan harta tanah.error.path:

server.error.path=/error

Dengan cara ini pengawal dapat menangani panggilan ke / jalan ralat .

Di handleError () , kami mengembalikan halaman ralat tersuai yang kami buat sebelumnya. Sekiranya kita mencetuskan ralat 404 sekarang, itu adalah halaman khusus kita yang akan dipaparkan.

Mari kita tingkatkan lebih jauh handleError () untuk memaparkan halaman ralat khusus untuk pelbagai jenis ralat.

Sebagai contoh, kita dapat membuat halaman yang dirancang dengan baik khusus untuk jenis kesalahan 404 dan 500. Kemudian kita boleh menggunakan kod status HTTP ralat untuk menentukan halaman ralat yang sesuai untuk dipaparkan:

@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 ralat 404, misalnya, kita akan melihat halaman ralat-404.html :

4. Kesimpulan

Dengan maklumat ini, kita dapat mengatasi masalah dengan lebih elegan dan menunjukkan halaman estetik kepada pengguna kita.

Seperti biasa, kod sumber lengkap boleh didapati di Github.