特定のクエリパラメータはオプションであり、デフォルトの引数を提供しないとドキュメントに記載されているRESTful APIがあります。そのため、値をパラメーターとして提供するか、GETリクエストでパラメーターとして送信しないことができます。
例:
queryA
は必須ですqueryB
はoptional(それなしでGET
を送信できます)これは動作するはずです:
http://www.example.com/service/endpoint?queryA=foo&queryB=bar
これも動作するはずです:
http://www.example.com/service/endpoint?queryA=foo
Jersey-Proxy のクライアントインターフェイスを作成するにはどうすればよいですか? サーバー側のコードがないため、Jersey-Proxy経由でorg.glassfish.jersey.client.proxy.WebResourceFactory
を使用して、対話するクライアントを生成していますサーバーAPI。
サンプルインターフェイス:
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
@Path("/service")
@Produces("application/json")
public interface ServiceInterface {
@Path("/endpoint")
@GET
public Response getEndpoint(
@QueryParam("queryA") String first,
@QueryParam("queryB") String second);
}
私は別の方法を作ることができることを知っています:
@Path("/endpoint")
@GET
public Response getEndpoint(
@QueryParam("queryA") String first);
しかし、複数のオプションフィールドがある場合はどうなりますか?それらのすべての可能な突然変異を作りたくありません!
メソッドにUriInfo
インスタンス(またはHttpServletRequest
のようなもの)を注入し、必要なデータを取得できます。
例えば
@Path("/endpoint")
@GET
public Response getEndpoint(@Context UriInfo info, @QueryParam("queryA") String queryA) {
String queryB = info.getQueryParameters().getFirst("queryB");
if (null != queryB) {
// do something with it
}
...
}