java – 使用JAX-RS中的Location头创建响应

前端之家收集整理的这篇文章主要介绍了java – 使用JAX-RS中的Location头创建响应前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在NetBeans中自动生成具有来自实体的RESTful模板的类,具有CRUD功能(用POST,GET,PUT,DELETE注释).我有一个create方法的问题,在从前端插入一个实体后,我想创建更新一个响应,以便我的视图将自动(或异步地,如果这是正确的术语)反映添加的实体.

我遇到这个(例子)代码行,但是写在C#(其中我一无所知):

HttpContext.Current.Response.AddHeader("Location","api/tasks" +value.Id);

在Java中使用JAX-RS,是否还可以像C#一样获取当前的HttpContext并操纵头?

我最近遇到的是

Response.ok(entity).header("Location","api/tasks" + value.Id);

这肯定不行.在构建响应之前,似乎需要获取当前的HttpContext.

谢谢你的帮助.

解决方法

我想你的意思是做一些类似Response.created(createdURI).build()的事情.这将创建一个具有 201 Created状态的响应,而createUri是位置头值.通常这是用POSTs完成的.在客户端,您可以调用将返回新URI的Response.getLocation().

Response API

> public static Response.ResponseBuilder created(URI location) – 为创建的资源创建一个新的ResponseBuilder,使用提供的值设置位置头.
> public abstract URI getLocation() – 返回位置URI,否则如果不存在则为null.

请记住您为创建的方法指定的位置:

the URI of the new resource. If a relative URI is supplied it will be converted into an absolute URI by resolving it relative to the request URI.

如果您不想依赖静态资源路径,可以从UriInfo获取当前的uri路径.你可以做一些类似的事情

@Path("/customers")
public class CustomerResource {
    @POST
    @Consumes(MediaType.APPLICATION_XML)
    public Response createCustomer(Customer customer,@Context UriInfo uriInfo) {
        int customerId = // create customer and get the resource id
        UriBuilder builder = uriInfo.getAbsolutePathBuilder();
        builder.path(Integer.toString(customerId));
        return Response.created(builder.build()).build();
    }
}

这将创建位置… / customers / 1(或任何customerId是),并将其作为响应头发送

请注意,如果要发送实体以及响应,可以将entity(Object)附加到Response.ReponseBuilder的方法链中

猜你在找的Java相关文章