Czy kontroler Spring może obsłużyć oba rodzaje żądań?
1) http://localhost:8080/submit/id/ID123432?logout=true
2) http://localhost:8080/submit/id/ID123432?name=sam&password=543432
Jeśli zdefiniuję pojedynczy kontroler tego rodzaju:
@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 {...}
żądanie HTTP z „wylogowaniem” nie jest akceptowane.
Jeśli zdefiniuję dwa kontrolery do obsługi każdego żądania osobno, Spring narzeka z wyjątkiem „Istnieje już metoda fasoli„ Controller ”… zmapowana”.
java
spring
spring-mvc
Luksmir
źródło
źródło
Odpowiedzi:
Trzeba dać
required = false
zaname
ipassword
parametry żądania, jak również. To dlatego, kiedy podać tylkologout
parametr, to faktycznie oczekuje naname
ipassword
jak są one jeszcze obowiązkowe.Działało, kiedy właśnie podałeś,
name
apassword
ponieważlogout
nie było to obowiązkowy parametr dziękirequired = false
już podanemulogout
.źródło
Od tego
Spring 4.1.1
momentu masz teraz pełną obsługę Java 8Optional
( oryginalny bilet ), dlatego w twoim przykładzie oba żądania będą przechodzić przez jeden punkt końcowy mapowania, o ile zastąpiszrequired=false
je Opcjonalnym logowaniem, nazwą, hasłem:źródło
Utwórz 2 metody obsługujące sprawy. Możesz poinstruować
@RequestMapping
adnotację, aby uwzględniła określone parametry podczas mapowania żądania. W ten sposób możesz ładnie podzielić to na 2 metody.źródło
!myParam style expressions indicate that the * specified parameter is not supposed to be present in the request.
spróbować.handleLogin
innego, poda wyjątek stwierdzający, że nie można znaleźć odwzorowania.