Gar*_*son 4 java rest jax-rs httpresponse
我有一个RESTful服务器实现以及一个供客户端进行调用的库,所有这些都使用JAX-RS。服务器组件分为接口FooResource和实现FooResourceService。
为了使客户端和服务器库共享RESTful路径和其他定义,我想将FooResource接口拆分为自己的项目:
@Path(value = "foo")
public interface FooResource {
@GET
public Bar getBar(@PathParam(value = "{id}") int id) {
Run Code Online (Sandbox Code Playgroud)
我想在响应中设置一些标题。一种简单的方法是@Context HttpServletResponse在方法签名中使用:
public Bar getBar(@PathParam(value = "{id}") int id, @Context HttpServletResponse servletResponse) {
Run Code Online (Sandbox Code Playgroud)
但是问题在于这暴露了接口中的实现细节。更具体地说,它突然需要我的REST定义项目(在客户端和服务器库之间共享)来引入javax.servlet-api依赖项-客户端不需要(或不需要)某些东西。
我的RESTful资源服务实现如何设置HTTP响应标头而不在资源接口中引入依赖关系?
我看到一篇推荐我将HttpServletResponse作为类成员注入的帖子。但是,如果我的资源服务实现是单例的,这将如何工作?它是否使用某种具有线程局部变量的代理,或者即使多个线程同时使用singleton类,也能找出正确的servlet响应的代理?还有其他解决方案吗?
正确的答案似乎是HttpServletResponse在实现的成员变量中注入,正如我指出的另一篇文章所指出的那样。
@Context //injected response proxy supporting multiple threads
private HttpServletResponse servletResponse;
Run Code Online (Sandbox Code Playgroud)
即使peeskillet指出Jersey的半官方列表未列出HttpServletResponse为可代理类型之一,但当我跟踪代码时,至少RESTEasy似乎正在创建代理(org.jboss.resteasy.core.ContextParameterInjector$GenericDelegatingProxy@xxxxxxxx)。据我所知,似乎正在发生单例成员变量的线程安全注入。
| 归档时间: |
|
| 查看次数: |
6150 次 |
| 最近记录: |