2017-07-14 127 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 –

相关问题