@RequestParam en primavera MVC manejo de parámetros opcionales
¿Es posible que un controlador de resorte maneje ambos tipos de solicitudes?
1) http://localhost:8080/submit/id/ID123432?logout=true
2) http://localhost:8080/submit/id/ID123432?name=sam&password=543432
Si defino un solo controlador del tipo:
@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 {...}
No se acepta la solicitud HTTP con "logout".
Si defino dos controladores para manejar cada solicitud por separado, Spring se queja con la excepción de "Ya existe el método bean 'Controller'... asignar".
3 answers
Usted necesita dar required = false
para name
y password
parámetros de solicitud también. Esto se debe a que, cuando se proporciona solo el parámetro logout
, en realidad se espera para name
y password
, así como que todavía son obligatorios.
Funcionó cuando acabas de dar name
y password
porque logout
no era un parámetro obligatorio gracias a required = false
ya dado para logout
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-13 09:53:38
Como parte de Spring 4.1.1
en adelante, ahora tiene soporte completo de Java 8 Optional
(ticket original ) por lo tanto, en su ejemplo, ambas solicitudes irán a través de su punto final de asignación único, siempre y cuando reemplace required=false
con Opcional para su 3 params logout, nombre, contraseña:
@RequestMapping (value = "/submit/id/{id}", method = RequestMethod.GET,
produces="text/xml")
public String showLoginWindow(@PathVariable("id") String id,
@RequestParam(value = "logout") Optional<String> logout,
@RequestParam("name") Optional<String> username,
@RequestParam("password") Optional<String> password,
@ModelAttribute("submitModel") SubmitModel model,
BindingResult errors) throws LoginException {...}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-15 23:52:41
Cree 2 métodos que manejen los casos. Puede indicar a la anotación @RequestMapping
que tenga en cuenta ciertos parámetros al asignar la solicitud. De esa manera se puede dividir bien esto en 2 métodos.
@RequestMapping (value="/submit/id/{id}", method=RequestMethod.GET,
produces="text/xml", params={"logout"})
public String handleLogout(@PathVariable("id") String id,
@RequestParam("logout") String logout) { ... }
@RequestMapping (value="/submit/id/{id}", method=RequestMethod.GET,
produces="text/xml", params={"name", "password"})
public String handleLogin(@PathVariable("id") String id, @RequestParam("name")
String username, @RequestParam("password") String password,
@ModelAttribute("submitModel") SubmitModel model, BindingResult errors)
throws LoginException {...}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-16 14:30:57