Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JAX-RS的异步REST调用_Rest_Asynchronous_Jax Rs - Fatal编程技术网

使用JAX-RS的异步REST调用

使用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

我需要创建一个RESTful服务,它应该以如下方式支持异步调用。当用户调用某个方法时,他得到了http“202”代码和url以进行轮询,在那里他可以看到他的请求的状态。目前我使用JAX-RS及其注释:

@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返回域模型对象,这些对象会自动编组为必要的类型。所以我不想用回应来折磨他们。另一个原因是,在集成测试中,我使用的是代理类,我只接收普通的域对象,而不是封装在响应中的对象?