2016-12-12 5 views
0

В настоящее время я пытаюсь добавить новую функцию в свой REST API.Java REST API Query annotation

В основном я хочу добавить возможность добавления параметров запроса в конец пути и превратить это в карту всех параметров запроса, например.

мой текущий код позволяет мне делать такие вещи, как

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&... 

, и я бы тогда это сгенерировать карту, которая может быть использована вместе с pathparam, чтобы построить ответ

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

Я был что-то вроде этого [ниже], однако @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

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. Эта опция может быть полезна, если вы можете принять незакрепленные параметры

@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

Спасибо, что я буду проверять, как только могу поблагодарить вас! –