J'essaie de mettre en place un bean à portée de demande au printemps.
Je l'ai configuré avec succès pour que le bean soit créé une fois par demande. Maintenant, il doit accéder à l'objet HttpServletRequest.
Puisque le bean est créé une fois par requête, je suppose que le conteneur peut facilement injecter l'objet de requête dans mon bean. Comment puis je faire ça ?
Spring expose l'
HttpServletRequest
objet actuel (ainsi que l'HttpSession
objet actuel ) via un objet wrapper de typeServletRequestAttributes
. Cet objet wrapper est lié à ThreadLocal et est obtenu en appelant lastatic
méthodeRequestContextHolder.currentRequestAttributes()
.ServletRequestAttributes
fournit la méthodegetRequest()
pour obtenir la requête actuelle,getSession()
pour obtenir la session actuelle et d'autres méthodes pour obtenir les attributs stockés dans les deux étendues. Le code suivant, bien qu'un peu laid, devrait vous obtenir l'objet de requête actuel n'importe où dans l'application:Notez que la
RequestContextHolder.currentRequestAttributes()
méthode renvoie une interface et doit être typée pourServletRequestAttributes
implémenter l'interface.Javadoc de printemps: RequestContextHolder | ServletRequestAttributes
la source
Comme suggéré ici, vous pouvez également injecter le paramètre en
HttpServletRequest
tant que méthode, par exemple:la source