【发布时间】:2015-05-08 12:51:15
【问题描述】:
我正在使用 Jax-RS 2.0 (Resteasy 3.0.7.Final) 实现一个 Restful 服务,并在客户端和服务之间共享接口。
返回值是无效的,因为自从 RestEasy 在版本 3+ 中引入 JAX-RS 2.0 以来,ClientResponse 已被弃用。
为了返回新创建对象的位置,我使用@Context 注解注入响应,并添加 Content-Location 标头。
例如:
共享接口:
@Path("/")
@Consumes("application/xml")
@Produces("application/xml")
interface Resource {
@Path("createSomething")
void createSomething(AnyObject object);
...
}
实现类(服务):
class ResourceImpl {
...
@Context org.jboss.resteasy.spi.HttpResponse response;
...
@Override
void createSomething(AnyObject object) throws AnyException {
String id = service.create(object);
response.getOutputHeaders().putSingle("Content-Location",
"/createSomething/" + id);
response.setStatus(Response.Status.CREATED.getStatusCode());
}
}
客户端(使用 Resteasy 代理框架构建):
...
ResteasyClient client = new ResteasyClientBuilder().build();
ResteasyWebTarget target = client.target(baseUrl);
Resource resource = (Resource) target.proxy(Resource.class);
resource.createSomething(anyObject);
...
如何检索服务注入的 Header 信息(以及其他信息,例如 Atom Links)?
使用客户端过滤器和拦截器是否合理?
谢谢
【问题讨论】: