我有一个Jersey 2.x端点,用户可以POST来更新父资源上的特定属性。成功之后,我想返回303状态,并在Location
标题中指定父资源的路径。
例如。如果用户发布到:
http://example.com/api/v1/resource/field
然后在响应中设置位置标题:
http://example.com/api/v1/resource
使用UriInfo
/ UriBuilder
似乎应该有一种直截了当的方法来做到这一点,但我不知道怎么做而不用硬编码可能会破坏的东西以后。
答案 0 :(得分:4)
从UriInfo.getBaseUriBuilder()
获取基本URI(假设为http://example.com/api
),然后使用builder.path(XxxResource.class)
附加XxxResource
路径。
然后从构建的URI
返回Response.seeOther(uri).build();
。完整的例子:
@Path("/v1/resource")
public class Resource {
@GET
public Response getResource() {
return Response.ok("Hello Redirects!").build();
}
@POST
@Path("/field")
public Response getResource(@Context UriInfo uriInfo) {
UriBuilder uriBuilder = uriInfo.getBaseUriBuilder();
uriBuilder.path(Resource.class);
URI resourceBaseUri = uriBuilder.build();
return Response.seeOther(resourceBaseUri).build();
}
}