注解@RequestAttribute
可以被用于访问由过滤器或拦截器创建的、预先存在的请求属性
例1:请求预先存在的属性。
先用@ModelAttribute定义预先存在的属性
@ModelAttribute
void beforeInvokingHandlerMethod(HttpServletRequest request) {
request.setAttribute("foo", "hello world");
}
用
@RequestAttribute
去请求数据:
@ModelAttribute
void beforeInvokingHandlerMethod(HttpServletRequest request) {
request.setAttribute("foo", "hello world");
}
@RequestMapping(value="/data/custom", method=RequestMethod.GET)
public @ResponseBody String custom(@RequestAttribute("foo") String foo) {
return "Got 'foo' request attribute value '" + foo + "'";
}
在HTML页面中请求数据:
<div id="customArgs">
<h3>Custom Resolvable Web Arguments</h3>
<ul>
<li>
<a id="customArg" class="textLink" href="<c:url value="/data/custom" />">Custom</a>
</li>
</ul>
</div>
用ajax请求数据:
$("a.textLink").click(function() {
var link = $(this);
$.ajax({
url: link.attr("href"),
dataType: "text",
success: function (text) {
alert(text)
}
})
})
运行结果:
例2:请求拦截器创建的属性。
创建一个拦截器类 TestFilter
@WebFilter(filterName = "myFilter",description = "测试过滤器",urlPatterns = {"/*"})
public class TestFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println(" 我是过滤器类 ");
servletRequest.setAttribute("test","you got it ");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
请求创建的属性:
@RequestMapping(value="/data/custom", method=RequestMethod.GET)
public @ResponseBody String custom(@RequestAttribute("foo") String foo,
@RequestAttribute("test") String test) {
System.out.println("Got 'foo' request attribute value '" + foo + "'------"+test);
return "Got 'foo' request attribute value '" + foo + "'------"+test;
}
运行结果: