2016-09-21 6 views
0

Ich habe einen Spring HandlerInterceptor eingerichtet, um dem HttpServletRequest ein Attribut hinzuzufügen, damit es vom Controller gelesen werden kann. Leider scheint das nicht zu funktionieren, was mir seltsam vorkommt. Mache ich etwas falsch? Irgendeine Idee, wie man die Daten vom Auffänger zum Kontroller überträgt?Spring 3 HandlerInterceptor übergibt Informationen an Controller

Hier ist der vereinfachte Code der beiden betroffenen Klassen

public class RequestInterceptor implements HandlerInterceptor { 
    @Override 
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { 
     request.setAttribute("my-role", "superman"); 
    } 
    [...] 
} 

@RestController 
@RequestMapping("Test") 
public class TestController { 
    public final Logger logger = LoggerFactory.getLogger(getClass()); 

    @RequestMapping(value = "something") 
    public void something(HttpServletRequest request) { 
     logger.info(request.getAttribute("my-role")); 
    } 

    [...] 
} 

Die request.getAttribute („my-Rolle“) null zurück ... aber die vorbehalten Wert zurückgibt, wenn ich es in der postHandle lesen der HandlerInterceptor, ich fühle mich wie ich etwas vermisse ...

EDIT: Ich fand heraus, dass durch die Sitzung mit "request.getSession(). SetAttribute" funktioniert als ein Charme, noch verstehe ich nicht warum Die Anfrage selbst funktioniert in diesem Anwendungsfall nicht.

+0

Post alle Ihre Abfangjäger Code – george

Antwort

0

Können Sie versuchen mit Sitzung statt Anfrage wie unten.

public boolean preHandle(HttpServletRequest request, 
       HttpServletResponse response, Object handler) throws Exception { 
       ... 
       HttpSession session = request.getSession(); 
       session.setAttribute("attributeName", objectYouWantToPassToHandler); 
       .... 
       } 
    In your handler handleRequest method: 

     public ModelAndView handleRequest(HttpServletRequest request, 
      HttpServletResponse response) throws Exception {     

      .... 
      HttpSession session = request.getSession(); 
      objectYouWantToPassToHandler objectYouWantToPassToHandler = session.getAttribute("attributeName"); 
      .... 


    } 
+0

Ja genau, es funktioniert, noch verstehe ich nicht, warum die Anfrage Ebene nicht funktionieren würde. – JavaCupiX

Verwandte Themen