J'utilise un contrôleur basé sur les annotations de Spring. Je veux que mon URL /user/messages mappe vers un contrôleur a si la balise query parameter est présente, sinon vers un contrôleur différent b. Ceci est nécessaire parce que lorsque la balise parameter est présente, d'autres paramètres peuvent être présents en même temps que ceux que je veux gérer dans un contrôleur différent pour garder l'implémentation propre. Existe-t-il également une autre solution élégante à ce problème ?
Réponses
Trop de publicités?Vous pouvez utiliser le params
de l'attribut @RequestMapping
pour sélectionner une méthode de contrôle en fonction des paramètres Http.
Voir cet exemple :
@RequestMapping(params = "form", method = RequestMethod.GET)
public ModelAndView createForm() {
...
}
@RequestMapping(method = RequestMethod.GET)
public ModelAndView list() {
...
}
C'est un style REST comme celui utilisé par Spring ROO : si la requête contient le paramètre forms
alors le createForm
est utilisé, sinon le gestionnaire list
est utilisée.
Si vous souhaitez emprunter la voie de Spring, vous pouvez utiliser le HandlerInterceptor mentionné dans le document suivant aquí . L'intercepteur peut jeter un coup d'oeil à votre paramètre de requête et rediriger le lien vers quelque chose d'autre qui peut être attrapé par un autre SimpleUrlMapper.
L'autre moyen est de l'envoyer à un seul contrôleur et de laisser le contrôleur faire suivre une autre action si le paramètre de requête est "b".