6

Dropwizard / Jersey を使用して Web サービスを構築しています。リソースにはパスがあり、メソッドにはサブパスがあります。作成された応答 (201) を返すとき、取得しているメソッドのパスは、指定した場所の先頭に追加されます。ステータス OK を場所とともに返す場合 (私が知っているのはわざとです)、すべて問題なく、提供したとおりの場所が返されます。

メソッドの場所のサブパスではない場所を返すにはどうすればよいでしょうか?

以下の例では、「http://localhost/foo/bar」(作成されたステータス) にアクセスすると、「http://localhost/foo/bar/wibble」の場所が返されます ( /foo/barに注意してください) 。

一方、"http://localhost/foo/baz" への get (ok ステータス) は、必要な "http://localhost/wibble" の場所で応答します。

import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;
import java.net.URI;

@Path("/foo")
public class FooResource {

    @POST
    @Path("/bar")
    public Response bar() {

        URI uriOfCreatedResource = URI.create("/wibble");
        return Response.created(uriOfCreatedResource).build();
    }

    @POST
    @Path("/baz")
    public Response baz() {

        URI uriOfCreatedResource = URI.create("/wibble");
        return Response.ok().location(uriOfCreatedResource).build();
    }
}
4

3 に答える 3

4

GlassFish(JavaEE6)で私に起こりました。バグだと思いますが、コードを実際の URI 変換に掘り下げることはできませんでした....

私は回避策を見つけました:

public Response bar(@Context UriInfo info) {
   URI absoluteURI=info.getBaseUriBuilder().path("/wibble").build();
   return Response.created(absoluteURI).build();
}
于 2012-12-04T13:42:08.167 に答える