赞
踩
之前我在这篇文章说过Spring往容器里管理了Request对象,所以你可以在spring的任何实例里面注入HTTPRequest对象。具体是怎么实现的呢?
今天就来更详细地分析下~
public class HealthController {
@Resource
private HttpServletRequest request;
@ApiOperation("健康检查")
@GetMapping("check")
public String health() {
System.out.println(request);
System.out.println(request.getRequestURI());
return "OK";
}
}
为了测试,在我们的健康检查接口类里注入了request对象,同时在健康检查的接口里打印信息
接口调用之后,打印结果如下
Current HttpServletRequest
/xxxxx/api/health/check
如果不想通过注入方式,也可以通过((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest()拿到咱们的request对象。
想想,我们给Spring注入的ServletRequest对象是什么
beanFactory.registerResolvableDependency(ServletRequest.class, new RequestObjectFactory());
我们再来看看这个RequestObjectFactory类
@SuppressWarnings("serial") private static class RequestObjectFactory implements ObjectFactory<ServletRequest>, Serializable { @Override public ServletRequest getObject() { return currentRequestAttributes().getRequest(); } @Override public String toString() { return "Current HttpServletRequest"; } }
可以看到toString()方法的返回,也就是咱们的打印
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。