web-dev-qa-db-fra.com

Accès à l'objet HttpServletRequest in a classe Java normale from spring of Spring

J'ai une classe Java normale dans une application Web Spring MVC 3.06. 

Dans cette classe, je souhaite injecter ou récupérer l'objet HttpServletRequest dans une méthode. 

Je sais que je peux faire circuler cela, mais je me demandais comment puis-je obtenir la demande sans la transmettre à la méthode. Peut-être en utilisant des annotations ou similaires?

En outre, quelles sont les "vraies" préoccupations quant à la manière de saisir la demande de cette façon, à l’exception de l’opinion de certains qui la qualifie de moche. Je veux dire, est-il instable d'y accéder de cette façon?

De manière non dépendante du serveur d'applications.

J'ai vu 

(HttpServletRequest) RequestContextHolder.getRequestContext().getExternalContext().getNativeRequest() 

mais cela ne semble pas fonctionner pour Spring MVC 3.06. RequestContextHolder n'a pas la méthode getRequestContext()

15
momomo

Utilisation

((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();

Je ne sais pas où vous avez eu RequestContextHolder.getRequestContext(), c'est complètement faux.

est-il instable d'y accéder de cette façon?

Non, il est suffisamment stable, si vous exécutez toujours le code dans le cadre d'un thread de requête HttpServlet. Le problème principal est que oui, c'est moche et cela rend votre code difficile à tester. C'est une raison suffisante pour ne pas l'utiliser.

Si vous devez utilisez-le, découplez-le de votre code, par exemple.

public void doSomething() {
    HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
    doSomething(request);
}

void doSomething(HttpServletRequest request) {
   // put your business logic here, and test this method
}
28
skaffman

@Context HttpServletRequest httpServletRequest = null; 

utilisez ceci 

0
user3465058