我在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().
> 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的方法链中