Возможно ли для контроллера Spring обрабатывать оба вида запросов?
1) http://localhost:8080/submit/id/ID123432?logout=true
2) http://localhost:8080/submit/id/ID123432?name=sam&password=543432
Если я определю один контроллер вида:
@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 {...}
HTTP-запрос с «выходом из системы» не принят.
Если я определяю два контроллера для обработки каждого запроса по отдельности, Spring жалуется с исключением «Метод bean-компонента« Контроллер »уже ... сопоставлен».
java
spring
spring-mvc
luksmir
источник
источник
Ответы:
Вы должны предоставить
required = false
дляname
иpassword
параметры запроса , а также. Это потому , что, когда вы предоставляете толькоlogout
параметр, он на самом деле ожидаетname
иpassword
так же , как они по - прежнему является обязательным.Это сработало, когда вы только что дали
name
иpassword
потому чтоlogout
не было обязательным параметром, благодаряrequired = false
уже предоставленному дляlogout
.источник
Как часть
Spring 4.1.1
впереди, теперь у вас есть полная поддержка Java 8Optional
( оригинальная заявка ), поэтому в вашем примере оба запроса будут проходить через конечную точку вашего единого сопоставления, если вы заменитеrequired=false
на Optional для выхода из 3 параметров, имени, пароля:источник
Создайте 2 метода, которые обрабатывают случаи. Вы можете указать
@RequestMapping
аннотации учитывать определенные параметры при отображении запроса. Таким образом, вы можете разделить это на 2 метода.источник
!myParam style expressions indicate that the * specified parameter is not supposed to be present in the request.
что надо попробовать.handleLogin
иначе он выдаст исключение, сообщающее, что сопоставление не может быть найдено.