¿Es posible que un controlador Spring 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 "cerrar sesión".
Si defino dos controladores para manejar cada solicitud por separado, Spring se queja con la excepción "Ya hay un método de bean 'Controlador' ... mapeado".
java
spring
spring-mvc
luksmir
fuente
fuente

Respuestas:
Es necesario dar
required = falseanameypasswordparámetros de la petición así. Esto se debe a que, cuando proporciona solo ellogoutparámetro, en realidad esperanameypassword, además de que todavía es obligatorio.Funcionó cuando acaba de dar
nameypasswordporquelogoutno era un parámetro obligatorio gracias a querequired = falseya se diologout.fuente
Como parte en
Spring 4.1.1adelante, ahora tiene soporte completo de Java 8Optional( boleto original ), por lo tanto, en su ejemplo, ambas solicitudes irán a través de su punto final de mapeo único siempre que lo reemplacerequired=falsecon Opcional para su cierre de sesión de 3 parámetros, nombre, contraseña:fuente
Crea 2 métodos que manejan los casos. Puede indicar a la
@RequestMappinganotación que tenga en cuenta ciertos parámetros al asignar la solicitud. De esa manera, puedes dividir esto en 2 métodos.fuente
!myParam style expressions indicate that the * specified parameter is not supposed to be present in the request.tengo que probar.handleLoginotra, dará una excepción que indica que no se puede encontrar la asignación.