2010-09-27 3 views
3

Actuellement, j'utilise request.setAttribute() et request.getAttribute() comme moyen de passer un objet d'un intercepteur de gestionnaire à une méthode de contrôleur. Je ne vois pas cela comme une technique idéale, car il faut que je prenne HttpServletRequest comme argument pour mes méthodes de contrôleur. Spring fait un bon travail en cachant l'objet de requête des contrôleurs, donc je n'en aurais pas besoin sauf pour ce but.Spring Web MVC: Passer un objet de l'intercepteur du gestionnaire au contrôleur?

J'ai essayé d'utiliser l'annotation @RequestParam avec le nom que j'ai défini dans setAttribute(), mais cela n'a bien sûr pas fonctionné car les attributs de requête ne sont pas des paramètres de requête. À ma connaissance, il n'y a pas d'annotation @RequestAttribute à utiliser pour les attributs. Ma question est, existe-t-il un meilleur moyen de transférer des objets des intercepteurs aux méthodes de contrôleur sans avoir recours à les définir comme des attributs sur l'objet de requête?

Répondre

0

Je ne pense pas qu'il y en ait. Mais vous pouvez créer votre propre annotation @RequestAttribute. Voir spring mvc annotation @RequestAttribute similar to @RequestParam pour une question similaire et un lien vers la source.

+0

Si je devais ajouter un @RequestAttribute personnalisé, comment pourrais-je aller au sujet faire ce travail au printemps? Comment Spring sait-elle que faire? – JamesH

0

Juste pour gagner du temps pour ceux qui visitent cette page: depuis Spring 4.3 @RequestAttribute l'annotation est une partie de Spring MVC, il n'est donc pas nécessaire de créer votre propre annotation @RequestAttribute.

0

Utilisez la méthode prehandle intercepteurs et session comme ceci:

Interceptor:

@Override 
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 
    if (!(handler instanceof HandlerMethod)) { 
     return true; 
    } 
    HttpSession session = request.getSession(); 
    String attribute = "attribute"; 
    session.setAttribute("attributeToPass", attribute); 
    return true; 
} 

Controller:

@RequestMapping(method = RequestMethod.GET) 
public String get(HttpServletRequest request) { 
    String attribute = (String)request.getSession().getAttribute("attribteToPass"); 
    return attribute; 
} 
+0

N'ajoute-t-il pas à la session make spring renvoie les données au client dans la réponse lorsque le contrôleur revient? – andreasm

Questions connexes