É possível para um controlador Spring lidar com ambos os tipos de solicitações?
1) http://localhost:8080/submit/id/ID123432?logout=true
2) http://localhost:8080/submit/id/ID123432?name=sam&password=543432
Se eu definir um único controlador do 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 {...}
a solicitação HTTP com "logout" não é aceita.
Se eu definir dois controladores para manipular cada solicitação separadamente, o Spring reclamará com a exceção "Já existe o método do bean 'Controller' ... mapeado".
java
spring
spring-mvc
luksmir
fonte
fonte
Respostas:
Você precisa dar
required = false
paraname
epassword
parâmetros de solicitação também. Isso porque, quando você fornece apenas ologout
parâmetro, ele realmente esperaname
e,password
ainda assim, eles são obrigatórios.Funcionou quando você acabou de dar
name
epassword
porquelogout
não era um parâmetro obrigatório, graças aorequired = false
já dadologout
.fonte
Como parte de
Spring 4.1.1
agora em diante, agora você tem suporte total ao Java 8Optional
( tíquete original ), portanto, em seu exemplo, as duas solicitações passarão pelo seu ponto de extremidade de mapeamento único, desde que você substituarequired=false
por Opcional para o logout de 3 parâmetros, nome e senha:fonte
Crie 2 métodos que lidam com os casos. Você pode instruir a
@RequestMapping
anotação a levar em consideração determinados parâmetros ao mapear a solicitação. Dessa forma, você pode dividir isso perfeitamente em 2 métodos.fonte
!myParam style expressions indicate that the * specified parameter is not supposed to be present in the request.
tem que tentar.handleLogin
resto, além de fornecer uma exceção informando que nenhum mapeamento pode ser encontrado.