使用JAX-RS的异步REST调用
我需要创建一个RESTful服务,它应该以如下方式支持异步调用。当用户调用某个方法时,他得到了http“202”代码和url以进行轮询,在那里他可以看到他的请求的状态。目前我使用JAX-RS及其注释:使用JAX-RS的异步REST调用,rest,asynchronous,jax-rs,Rest,Asynchronous,Jax Rs,我需要创建一个RESTful服务,它应该以如下方式支持异步调用。当用户调用某个方法时,他得到了http“202”代码和url以进行轮询,在那里他可以看到他的请求的状态。目前我使用JAX-RS及其注释: @Path("") public interface MyService { @POST @Path("/myService/{name}") @Consumes({APPLICATION_XML, APPLICATION_JSON}) void postSome
@Path("")
public interface MyService {
@POST
@Path("/myService/{name}")
@Consumes({APPLICATION_XML, APPLICATION_JSON})
void postSomething(@PathParam("name") String name, MyObject data);
}
这种映射将通过url/MyService/{name}公开MyService的postSomething()方法,该方法为POST请求提供服务,从url获取'name'参数,从请求体获取'data'
我希望在发出这个PUT请求之后,客户端获得202个http代码和一些回调url,以便在执行方法后轮询以获得结果
因此,问题是:
1.如何使JAX-RS返回202代码?
2.如何将回调url传递给客户端?让postSomething方法返回响应对象:
public Response postSomething(@PathParam("name") String name, MyObject data) {
return Response.status(Status.ACCEPTED).build();
}
如果希望在HTTP正文中以纯文本形式显示回调URI,可以执行以下操作:
public Response postSomething(@PathParam("name") String name, MyObject data) {
return Response.status(Status.ACCEPTED).entity("http://google.com").build();
}
要通过资源类生成URI,请查看使用
@Context-HttpServletResponse-servletResponse
直接控制servlet的响应机制
@PUT
@Path("/myService/{name}")
@Consumes({APPLICATION_XML, APPLICATION_JSON})
void postSomething(@PathParam("name") String name, @Context HttpServletResponse response, MyObject data) {
// ...
response.setStatus(HttpServletResponse.SC_ACCEPTED);
response.setHeader("Location", myURL);
// ...
}
不,它没有返回响应对象吗?我可以让它返回202而不显式返回响应吗?为什么不显式返回响应呢?我有一些方法注释@products返回域模型对象,这些对象会自动编组为必要的类型。所以我不想用回应来折磨他们。另一个原因是,在集成测试中,我使用的是代理类,我只接收普通的域对象,而不是封装在响应中的对象?