Est-il possible pour un contrôleur Spring de gérer les deux types de requêtes?
1) http://localhost:8080/submit/id/ID123432?logout=true
2) http://localhost:8080/submit/id/ID123432?name=sam&password=543432
Si je définis un seul contrôleur du genre:
@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 requête HTTP avec "déconnexion" n'est pas acceptée.
Si je définis deux contrôleurs pour gérer chaque requête séparément, Spring se plaint de l'exception "Il existe déjà une méthode bean 'Controller' ... mappée".
java
spring
spring-mvc
Luksmir
la source
la source
Réponses:
Vous devez donner
required = false
pourname
etpassword
paramètres de la requête ainsi. En effet, lorsque vous ne fournissez que lelogout
paramètre, il attend en faitname
etpassword
aussi bien qu'ils sont toujours obligatoires.Cela a fonctionné quand vous venez de donner
name
etpassword
parce que celogout
n'était pas un paramètre obligatoire grâce àrequired = false
déjà donné pourlogout
.la source
Dans le cadre de la suite
Spring 4.1.1
, vous bénéficiez désormais d'un support complet de Java 8Optional
( ticket d'origine ), donc dans votre exemple, les deux requêtes passeront par votre seul point de terminaison de mappage tant que vous remplacezrequired=false
par Facultatif pour votre déconnexion 3 paramètres, nom, mot de passe:la source
Créez 2 méthodes qui gèrent les cas. Vous pouvez demander à l'
@RequestMapping
annotation de prendre en compte certains paramètres lors du mappage de la demande. De cette façon, vous pouvez diviser cela en 2 méthodes.la source
!myParam style expressions indicate that the * specified parameter is not supposed to be present in the request.
faut essayer.handleLogin
sinon il donnera une exception indiquant qu'aucun mappage ne peut être trouvé.