2016-12-12 4 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 
... => ... 

I이었다을 구축하기 위해 pathparam와 함께 사용할 수있는지도를 생성하는 것 이런 식으로 생각하면 @QueryParam은 하나의 키 값만을 처리하는 것처럼 보이고 그것들의 맵은 처리하지 않습니다.

@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

은 모든 쿼리 매개 변수를 주입 할 수 있습니다. 또한 지난 {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를 구문 분석 할 수 없습니다. 당신이 고정되지 않은 매개 변수

@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

@Context 내가 (이지도를 구축으로) 좋아하는 내가 찾고 있던 것을 그러나 내가 가졌다 문제는이 작업을지고을 받아 들일 수있는 경우이 옵션은 (유용 할 수) 몇 가지 예를 더 살펴볼 필요가 있습니다. 이렇게하면 @Path ("/ {format}/{part1}/{part2} /")를 사용할 수 있으며 그렇지 않으면 빈 상태로 두어야합니까? 나중에 UriInfo에서 경로를 추출 하시겠습니까? –

+0

'@ PathParam'과'@Context UriInfo'를 함께 사용할 수 있습니다. 내가 대답을 전체 예제를 포함 – pedrofb

+0

감사 내가 할 수있는대로 빨리 테스트합니다 감사합니다! –