2017-07-14 106 views
0

我想在他們到達控制器之前爲我的所有請求添加一個屬性。如何在控制器中注入HttpServletRequest屬性(在攔截器中設置)?

我所用:

@Component 
public class SessionValidatorInterceptor implements HandlerInterceptor { 

@Override 
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) 
     throws Exception { 
    .... some code .... 
    request.setAttribute("validRequest","true"); 
    .... more code ... 
    return true; 
} 

現在讓我休息控制器這個屬性我做:

public ResponseEntity<?> someMethod(HttpServletRequest request){ 
    request.getAttribute("validSession"); 
    ... 

我的問題是我能做到這一點更優雅像@RequestParam(」 validSession「)或@PathVariable或其他? 春天可以爲我做這個嗎?

感謝任何幫助。

+3

'@ RequestAttribute'(自Spring 4.3起可用)。 –

+0

哇。我有多愚蠢? 謝謝@ M.Deinum。請發表回答,以便我可以接受。 :) –

回答

3

在Spring 4.3中爲此添加了@RequestAttribute註釋。

public void yourMethod(@RequestAttribute("validRequest") boolean valid) 

這樣的事情應該做的伎倆。

如果您使用Spring的早期版本,則可以實施自己的HandlerMethodArgumentResolver來做同樣的事情。

+0

謝謝。我正在使用當前的春天版本,因此,它就像一個魅力! :) –

1

只需使用@RequestAttribute 像這樣

public ResponseEntity<?> someMethod(HttpServletRequest request, 
@RequestAttribute("validSession") String xyz){ 
} 

因爲,牛仔先生沒有張貼的答案,我想爲什麼不是我。^_^

+1

不能太早。你會得到upvote:p –

相關問題