gpt4 book ai didi

java - 在 JAX-RS 中使用位置 header 创建响应

转载 作者:搜寻专家 更新时间:2023-10-30 21:14:39 25 4
gpt4 key购买 nike

我在 NetBeans 中使用来自实体的 RESTful 模板自动生成类,带有 CRUD 函数(用 POST、GET、PUT、DELETE 注释)。我对 create 方法有问题,在从前端插入实体后,我希望 create 更新响应,以便我的 View 自动(或异步,如果这是正确的术语)反射(reflect)了添加的实体。

我遇到了这行(示例)代码,但它是用 C# 编写的(我对此一无所知):

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

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

我最接近的是

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

而这个肯定是行不通的。看来我需要在构建响应之前获取当前的 HttpContext。

感谢您的帮助。

最佳答案

我想你的意思是做一些像 Response.created(createdURI).build() 这样的事情。这将创建一个带有 201 Created 的响应状态,createdUri 是位置 header 值。通常这是通过 POST 完成的。在客户端,您可以调用 Response.getLocation(),它将返回新的 URI。

来自Response API

请记住您为 created 方法指定的 location:

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 路径。类(class)。你可以做类似的事情

@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 uriBuilder = uriInfo.getAbsolutePathBuilder();
uriBuilder.path(Integer.toString(customerId));
return Response.created(uriBuilder.build()).build();
}
}

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

请注意,如果您想将实体与响应一起发送,您只需附加 entity(Object)Response.ReponseBuilder

的方法链
return Response.created(uriBuilder.build()).entity(newCustomer).build();

关于java - 在 JAX-RS 中使用位置 header 创建响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26092318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com