我有一个Jersey 2.x端点,用户可以发布该端点以更新父资源上的特定属性。成功后,我想返回303状态并在Location标头中指定父资源的路径。

例如。如果用户发布到:

http://example.com/api/v1/resource/field

然后在响应中将位置标头设置为:
http://example.com/api/v1/resource

似乎应该有一种简单的方法来使用UriInfo / UriBuilder来执行此操作,但是我不知道如何在不进行硬编码的情况下执行此操作,这可能会在以后破坏。

最佳答案

http://example.com/api 获取基本URI(假定为UriInfo.getBaseUriBuilder()),然后在XxxResource路径后附加 builder.path(XxxResource.class)

然后从构建的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) {
        URI resourceBaseUri = uriInfo.getBaseUriBuilder()
            .path(Resource.class)
            .build();
        return Response.seeOther(resourceBaseUri).build();
    }
}

09-12 12:35