Ger*_*rit 6 java rest proxy dependency-injection jersey
当注入HttpServletRequest在Jersey/JAX-RS资源,注入的值是一个代理服务器.例如:
@Path("/myResource")
class MyResource {
@Inject
HttpServletRequest request;
...
}
Run Code Online (Sandbox Code Playgroud)
将为Proxy请求注入一个对象HttpServletRequest.我需要访问实际的HttpServletRequest实例对象,因为我想使用一些不在代理HttpServletRequest 接口中的容器特定功能.
在球衣中有没有办法通过注射进入实际物体?我知道在旧版本的泽西岛你可以注入一个ThreadLocal<HttpServletRequest>来达到这个目的.但这似乎不再支持球衣2.15了.
基本原理:我的代码依赖于org.eclipse.jetty.server.Request实现的HttpRequest功能,并增加了HTTP/2推送的功能.我想用Jersey/JAX-RS.
不要让您的资源类成为单例.如果您这样做,除了代理之外别无选择,因为请求的范围不同.
@Singleton
@Path("servlet")
public class ServletResource {
@Context
HttpServletRequest request;
@GET
public String getType() {
return request.getClass().getName();
}
}
Run Code Online (Sandbox Code Playgroud)
同 @Singleton
C:\>curl http://localhost:8080/api/servlet
com.sun.proxy.$Proxy41
没有 @Singleton
C:\>curl http://localhost:8080/api/servlet
org.eclipse.jetty.server.Request
您的类可以通过其他方式成为单例,例如将其注册为实例
您可以将其作为方法参数注入.单身或不单身,您将获得实际的实例
@GET
public String getType(@Context HttpServletRequest request) {
return request.getClass().getName();
}
Run Code Online (Sandbox Code Playgroud)
也可以看看
| 归档时间: |
|
| 查看次数: |
10770 次 |
| 最近记录: |