Apakah mungkin untuk kontroler Spring untuk menangani kedua jenis permintaan?
1) http://localhost:8080/submit/id/ID123432?logout=true
2) http://localhost:8080/submit/id/ID123432?name=sam&password=543432
Jika saya mendefinisikan satu pengontrol semacam itu:
@RequestMapping (value = "/submit/id/{id}", method = RequestMethod.GET,
produces="text/xml")
public String showLoginWindow(@PathVariable("id") String id,
@RequestParam(value = "logout", required = false) String logout,
@RequestParam("name") String username,
@RequestParam("password") String password,
@ModelAttribute("submitModel") SubmitModel model,
BindingResult errors) throws LoginException {...}
permintaan HTTP dengan "logout" tidak diterima.
Jika saya mendefinisikan dua kontroler untuk menangani setiap permintaan secara terpisah, Spring mengeluh dengan pengecualian "Sudah ada metode kacang 'Controller' ... dipetakan".
java
spring
spring-mvc
luksmir
sumber
sumber
Jawaban:
Anda perlu memberikan
required = false
untukname
danpassword
parameter permintaan juga. Itu karena, ketika Anda memberikan hanyalogout
parameter, itu sebenarnya mengharapkanname
danpassword
juga mereka masih wajib.Itu bekerja ketika Anda baru saja memberi
name
danpassword
karenalogout
itu bukan parameter wajib terima kasihrequired = false
sudah diberikan untuklogout
.sumber
Sebagai bagian dari
Spring 4.1.1
dan seterusnya Anda sekarang memiliki dukungan penuh Java 8Optional
( tiket asli ) karena itu dalam contoh Anda kedua permintaan akan pergi melalui titik akhir pemetaan tunggal Anda selama Anda menggantirequired=false
dengan Opsional untuk logout 3 params Anda, nama, kata sandi:sumber
Buat 2 metode yang menangani kasus. Anda dapat menginstruksikan
@RequestMapping
anotasi untuk mempertimbangkan parameter tertentu saat memetakan permintaan. Dengan begitu Anda dapat membagi ini menjadi 2 metode.sumber
!myParam style expressions indicate that the * specified parameter is not supposed to be present in the request.
harus coba.handleLogin
lain itu akan memberikan pengecualian yang menyatakan tidak ada pemetaan yang dapat ditemukan.