加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:02:10 所属栏目:Java 来源:网络整理
导读:我在NetBeans中自动生成具有来自实体的RESTful模板的类,具有CRUD功能(用POST,GET,PUT,DELETE注释).我有一个create方法的问题,在从前端插入一个实体后,我想创建更新一个响应,以便我的视图将自动(或异步地,如果这是正确的术语)反映添加的实体. 我遇到这个(例子
我在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的方法链中

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读