Saya mencoba untuk menghapus halaman kesalahan label putih, jadi apa yang saya lakukan adalah membuat pemetaan pengontrol untuk "/ kesalahan",
@RestController
public class IndexController {
@RequestMapping(value = "/error")
public String error() {
return "Error handling";
}
}
Tapi sekarang saya mendapatkan kesalahan ini.
Exception in thread "AWT-EventQueue-0" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'basicErrorController' bean method
public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletR equest)
to {[/error],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}: There is already 'indexController' bean method
Tidak tahu apakah saya melakukan kesalahan. Tolong saran.
EDIT:
Sudah ditambahkan
error.whitelabel.enabled=false
ke file application.properties, masih mendapatkan kesalahan yang sama
spring
spring-boot
Yasitha Waduge
sumber
sumber
spring.resources.add-mappings=false
?/error
jalur dipanggil?Jawaban:
Anda perlu mengubah kode Anda sebagai berikut:
Kode Anda tidak berfungsi, karena Spring Boot secara otomatis mendaftarkan
BasicErrorController
sebagai Spring Bean ketika Anda belum menentukan implementasiErrorController
.Untuk melihat fakta itu, navigasikan saja ke
ErrorMvcAutoConfiguration.basicErrorController
sini .sumber
BasicErrorController
(lihat github.com/spring-projects/spring-boot/blob/… ) untuk mencapai apa yang Anda inginkanErrorAttributes
objek itu (berisi detail kesalahan), tetapi kemudian saya mencoba hanya @Memutakhirkannya, dan itu berhasil. Untuk apa saya pergi sekarang: gist.github.com/jonikarppinen/662c38fb57a23de61c8bJika Anda menginginkan halaman respons "JSONish" yang lebih banyak, Anda dapat mencoba sesuatu seperti itu:
sumber
Spring boot doc 'salah' (sejak itu diperbaiki):
seharusnya
sumber
/error
. Untuk membebaskan/error
set titik akhirserver.error.path=/error-spring
atau beberapa jalur alternatif.Anda dapat menghapusnya sepenuhnya dengan menetapkan:
Namun, harap dicatat bahwa hal itu mungkin akan menyebabkan halaman daftar putih kontainer servlet muncul sebagai gantinya :)
EDIT: Cara lain untuk melakukan ini adalah melalui application.yaml. Masukkan nilai:
Dokumentasi
Untuk Spring Boot <2.0, kelasnya berada dalam paket
org.springframework.boot.autoconfigure.web
.sumber
Pengguna di sini mengatakan bahwa Anda harus mengatur
server.error.whitelabel.enabled
untukfalse
menonaktifkan halaman kesalahan standar. Mungkin itu yang Anda inginkan?Saya mengalami kesalahan yang sama setelah menambahkan / pemetaan kesalahan, omong-omong.
sumber
/error
. Untuk membebaskan/error
set titik akhirserver.error.path=/error-spring
atau beberapa jalur alternatif.Dengan Spring Boot> 1.4.x Anda bisa melakukan ini:
tetapi kemudian dalam kasus pengecualian wadah servlet akan menampilkan halaman kesalahan sendiri.
sumber
Ini tergantung pada versi booting musim semi Anda:
Ketika SpringBootVersion <=
1.2
kemudian gunakanerror.whitelabel.enabled = false
Ketika SpringBootVersion > =
1.3
lalu gunakanserver.error.whitelabel.enabled = false
sumber
Di Spring Boot 1.4.1 menggunakan tempache Template, menempatkan error.html di bawah folder templates akan cukup:
Variabel tambahan dapat diteruskan dengan membuat pencegat untuk
/error
sumber
Berikut adalah metode alternatif yang sangat mirip dengan "cara lama" dalam menentukan pemetaan kesalahan di
web.xml
.Cukup tambahkan ini ke konfigurasi Spring Boot Anda:
Kemudian Anda dapat menentukan halaman kesalahan dalam konten statis secara normal.
Penyesuai juga bisa terpisah
@Component
, jika diinginkan.sumber
Saya menggunakan Spring Boot versi 2.1.2 dan
errorAttributes.getErrorAttributes()
tanda tangan tidak bekerja untuk saya (sebagai tanggapan acohen). Saya ingin respons tipe JSON jadi saya melakukan sedikit penggalian dan menemukan metode ini melakukan persis apa yang saya butuhkan.Saya mendapatkan sebagian besar informasi saya dari utas ini serta dari posting blog ini .
Pertama, saya membuat
CustomErrorController
Spring yang akan mencari untuk memetakan kesalahan.Kedua, saya membuat
CustomHttpErrorResponse
kelas untuk mengembalikan kesalahan sebagai JSON.Akhirnya, saya harus mematikan Whitelabel dalam
application.properties
file.Ini bahkan harus bekerja untuk
xml
permintaan / tanggapan. Tapi saya belum mengujinya. Itu melakukan persis apa yang saya cari sejak saya membuat API tenang dan hanya ingin mengembalikan JSON.sumber
server.error.whitelabel.enabled = false
Sertakan baris di atas ke folder Resources folder application.properties
Lebih Banyak Masalah Kesalahan diselesaikan silakan merujuk http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-customize-the-whitelabel-error-page
sumber
Saya mencoba memanggil titik akhir REST dari microservice dan saya menggunakan metode put resttemplate .
Dalam desain saya jika ada kesalahan terjadi di dalam titik akhir REST itu harus mengembalikan respons kesalahan JSON, itu berfungsi untuk beberapa panggilan tetapi tidak untuk put ini , ia mengembalikan halaman kesalahan label putih sebagai gantinya.
Jadi saya melakukan investigasi dan saya menemukan itu;
Spring mencoba untuk memahami penelepon jika itu adalah mesin maka ia mengembalikan respons JSON atau jika itu adalah browser daripada mengembalikan halaman kesalahan label putih HTML.
Akibatnya: aplikasi klien saya perlu mengatakan kepada REST titik akhir bahwa pemanggil adalah mesin, bukan browser sehingga untuk ini aplikasi klien perlu menambahkan ' aplikasi / json ' ke dalam header ACCEPT secara eksplisit untuk metode 'put' resttemplate. Saya menambahkan ini ke header dan memecahkan masalah.
panggilan saya ke titik akhir:
untuk panggilan di atas saya harus menambahkan param header di bawah ini.
atau saya mencoba mengubah put to exchange juga, dalam hal ini, panggilan pertukaran menambahkan header yang sama untuk saya dan menyelesaikan masalah juga, tetapi saya tidak tahu mengapa :)
sumber
Spring Boot secara default memiliki halaman kesalahan " whitelabel " yang dapat Anda lihat di browser jika Anda menemukan kesalahan server. Whitelabel Error Page adalah halaman kesalahan Spring Boot generik yang ditampilkan ketika tidak ada halaman kesalahan khusus ditemukan.
Set "server.error.whitelabel.enabled = false" untuk beralih dari halaman kesalahan default
sumber
Saya memiliki masalah yang sama dengan pesan WhiteLabel Error pada Angular SPA saya setiap kali saya melakukan penyegaran.
Cara mengatasinya adalah membuat pengontrol yang mengimplementasikan ErrorController tetapi alih-alih mengembalikan sebuah String, saya harus mengembalikan objek ModelAndView yang meneruskan ke /
sumber