2016-12-12 18 views
0

現在、REST APIに新しい機能を追加しようとしています。Java REST APIクエリアノテーション

基本的には、パスの最後にクエリパラメータを追加し、これをすべてのクエリオプションのマップなどに追加する機能を追加します。

は私の現在のコードは私が

localhost:8181/cxf/check/ 
localhost:8181/cxf/check/format 
localhost:8181/cxf/check/a/b 
localhost:8181/cxf/check/format/a/b 

のようなものを行うことができます。これは、応答を生成するための文字列変数として、すべての@PathParamを使用します。

私が今やりたいことは追加です:

localhost:8181/cxf/check/a/b/?x=abc&y=def&z=ghi&... 
localhost:8181/cxf/check/format/a/b/?x=abc&y=def&z=ghi&... 

と私は、これは私がいた

x => abc 
y => def 
z => ghi 
... => ... 

応答を構築するためにpathparamと一緒に使用することができます地図を生成する必要がありますしかし、@QueryParamは1つのキー値しか扱えず、それらのマップは扱えないようです。

@GET 
@Path("/{format}/{part1}/{part2}/{query}") 
Response getCheck(@PathParam("format") String format, @PathParam("part1") String part1, @PathParam("part2") String part2, @QueryParam("query") Map<K,V> query); 

以下は現在のインターフェイスコードです。

@Produces(MediaType.APPLICATION_JSON) 
public interface RestService { 

@GET 
@Path("/") 
Response getCheck(); 

@GET 
@Path("/{format}") 
Response getCheck(@PathParam("format") String format); 

@GET 
@Path("/{part1}/{part2}") 
Response getCheck(@PathParam("part1") String part1,@PathParam("part2") String part2); 

@GET 
@Path("/{format}/{part1}/{part2}") 
Response getCheck(@PathParam("format") String format, @PathParam("part1") String part1, @PathParam("part2") String part2); 

} 

答えて

1

QueryParam("") myBeanすべてのクエリパラメータを取得できます。また、最後の{query}一部

@GET 
@Path("/{format}/{part1}/{part2}/") 
Response getCheck(@PathParam("format") String format, @PathParam("part1") String part1, @PathParam("part2") String part2, @QueryParam("") MyBean myBean); 

public class MyBean{ 
    public void setX(String x) {...} 
    public void setY(String y) {...} 
} 

を削除また、パラメータを宣言し、URIを解析することはできません。あなたは@Contextは、私が好きな私はこれを見ていた何か(それは地図を構築する) しかし、私は(これが動作するようになって問題を抱えていた非固定パラメータに

@GET 
@Path("/{format}/{part1}/{part2}/") 
public Response getCheck(@PathParam("format") String format, @PathParam("part1") String part1, @PathParam("part2") String part2, @Context UriInfo uriInfo) { 
    MultivaluedMap<String, String> params = uriInfo.getQueryParameters(); 
    String x= params.getFirst("x"); 
    String y= params.getFirst("y"); 
} 
+0

を受け付けることができる場合は、このオプションが役に立つかもしれません)これは@Path( "/ {format}/{part1}/{part2} /")を使用することができますか?それ以外の場合は空にしておかなければなりません。後でUriInfoからパスを抽出しますか? –

+0

'@ PathParam'と' @Context UriInfo'を一緒に使うことができます。私は答えの完全な例を含めた – pedrofb

+0

ありがとう私はできるだけ早くテストしますありがとう! –