122 votes

Spring: comment injecter un HttpServletRequest dans un haricot à demande?

J'essaie de mettre en place un haricot à la demande au printemps.

J'ai réussi à le configurer pour que le bean soit créé une fois par demande. Maintenant, il doit accéder à l'objet HttpServletRequest.

Étant donné que le bean est créé une fois par demande, je pense que le conteneur peut facilement injecter l'objet de requête dans mon bean. Comment puis je faire ça ?

159voto

Samit G. Points 2688

Printemps expose le courant HttpServletRequest objet (ainsi que le courant HttpSession objet) par l'intermédiaire d'un wrapper objet de type ServletRequestAttributes. Ce wrapper objet est lié à ThreadLocal et est obtenu en appelant l' static méthode RequestContextHolder.currentRequestAttributes().

ServletRequestAttributes fournit la méthode getRequest() pour obtenir la demande actuelle, getSession() pour obtenir la session en cours et d'autres méthodes pour obtenir les attributs stockés dans les deux champs. Le code suivant, bien qu'un peu moche, devrait vous obtenez la requête courante de l'objet n'importe où dans l'application:

HttpServletRequest curRequest = 
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())
.getRequest();

Notez que l' RequestContextHolder.currentRequestAttributes() méthode retourne une interface et doit être à typecasted ServletRequestAttributes qui implémente l'interface.


Printemps Javadoc: RequestContextHolder | ServletRequestAttributes

140voto

skaffman Points 197885

Les haricots de requête peuvent être automatiquement câblés avec l'objet de requête.

 private @Autowired HttpServletRequest request;
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X