Comment puis-je carte différentes valeurs pour un paramètre dans la même @RequestMapping dans Spring MVC?
Supposons que j'ai:
@RequestMapping(params = "action=nuovoprodotto")
public ModelAndView nuovoProdotto(
@RequestParam(value = "page", required = false, defaultValue = "-1") int page,
@RequestParam(value = "action") String action,
@ModelAttribute Prodotto prod, HttpSession session)
throws Exception {
est-il possible de cartographier cette demande à deux ou trois valeurs de paramètre "action"?
J'ai essayé de nombreuses façons comme
@RequestMapping(params = "action=nuovoprodotto, action=salvaprodotto")
ou
@RequestMapping(params = "action=nuovoprodotto|salvaprodotto")
mais ils ne fonctionnent pas... Si je ne peux pas quelles sont les solutions, d'ailleurs l'écriture d'un gestionnaire pour chaque valeur de paramètre combinaison?
OriginalL'auteur gotch4 | 2011-02-02
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
La
params
attribut est de typeString[]
, mais les annotations permettent d'écrire unString
à la place d'un seul élémentString[]
, de sorte que ces deux sont équivalentes:et
Référence:
@RequestMapping.params()
Mise à jour: mon mauvais, comme vous pouvez le lire dans la section Avancé @RequestMapping options, plusieurs paramètres sont combinés à l'aide de et, ou, de sorte qu'il ne peut pas travailler comme indiqué ci-dessus.
Je dirais donc que ce que vous avez à faire est de créer un alias méthode avec presque la même signature:
la solution que vous avez proposée est la plus évidente j'ai fini de l'utiliser. Merci quand même pour vos efforts 🙂
OriginalL'auteur
Non, ce n'est pas pris en charge.
D'une façon qui peut ne travail serait "substitution de" la méthode
boolean checkParameters(String[] params, HttpServletRequest request)
deServletAnnotationMappingUtils
Unforunaly c'est un statique méthode! Si vous avez besoin de remplacer les deux méthodes d'où elle est invoquée:
AnnotationMethodHandler.RequestMappingInfo
`boolean matches(HttpServletRequest request)DefaultAnnotationHandlerMapping
void validateMapping(RequestMapping mapping, HttpServletRequest request)
Mais pas de chance encore une fois:
AnnotationMethodHandler.RequestMappingInfo
est un intérieur classe et il est créé directement dans une autre intérieure (ServletHandlerMethodResolver
) deAnnotationMethodHandler
. Mais si vous passez outre ce trop, il peut être possible de travailler. (Au moins vous avez de copier l'ensemble du AnnotationMethodHandlerAdapter de classe et de modifier quelques lignes de code.)Donc en résumé: Le easyest façon est encore d'avoir les deux méthodes de gestionnaire d'.
OriginalL'auteur