sirve requestparam requestmapping recibir que parametros para mvc how arquitectura java spring spring-mvc

java - requestparam - recibir parametros requestmapping



@RequestParam en Spring MVC manejando parĂ¡metros opcionales (3)

Como parte de Spring 4.1.1 adelante, ahora tiene soporte completo de Java 8 Optional ( ticket original ), por lo tanto, en su ejemplo, ambas solicitudes pasarán a través de su único punto final siempre que reemplace required=false con Opcional para su cierre de 3 parámetros, 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 {...}

¿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 {...}

la solicitud HTTP con "cierre de sesión" no es aceptada.

Si defino dos controladores para manejar cada solicitud por separado, Spring se queja con la excepción "Ya hay un ''Bean controlador'' ... mapeado".


Crea 2 métodos que manejen los casos. Puede indicar la anotación @RequestMapping para tener en cuenta ciertos parámetros al mapear la solicitud. De esta manera, puedes dividir 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 {...}


También debe dar required = false para los parámetros de solicitud de name y password . Esto se debe a que, cuando proporciona solo el parámetro de logout , en realidad espera el name y la password , así como siguen siendo obligatorios.

Funcionó cuando acabas de dar el name y la password porque el logout no era un parámetro obligatorio gracias a required = false ya dado para el logout de logout .