2015-10-28 2 views
0

У меня есть службы Rest, что я хочу, чтобы отвечать на запросы со следующими путямиМожно ли хранить pathparams в виде списка?

1) /v1/config/type/service

2) /v1/config/type/service, service2

То, что я хотел бы, чтобы иметь возможность хранить путь параметров serviceName как List, где каждый элемент разделен запятой. Например, если кто-то типа v1/config/foo/bar1,bar2,bar3 хотел бы serviceName быть List с 3 элементами (bar1, bar2, bar3). Сейчас он просто возвращает список с 1 элементом, который содержит все три строки обслуживания. Возможно ли это? Или это то, что я просто должен разобрать. Код у меня будет показано ниже, это довольно грубый, как я нахожусь в начальной стадии проекта:

@ApplicationPath("/") 
@Path("/v1/config") 
public class ServiceRetriever extends Application { 

@GET 
@Produces(MediaType.TEXT_PLAIN) 
public String getHelloWorld() { 
    return "Hello World"; 
} 

@GET 
@Path("{type}/{serviceName}") 
@Produces("application/zip") 
public Response getServices(@PathParam("type") String type, @PathParam("serviceName")List<String> serviceNames, 
     @QueryParam("with_config") boolean withConfig, @QueryParam("with_drive") boolean withDriver) throws IOException 
{ 
    //some random file i made to test that we can return a zip 
    File file = new File(System.getProperty("user.home")+"/dummy.zip"); 
    System.out.println(serviceNames.size()); //returns 1 

    //we can change the zip file name to be whatever 
    return Response.ok(file).header("Content-Type","application/zip"). 
      header("Content-Disposition", "attachment; filename="+file.getName()).build(); 
} 
+0

Я не уверен, что я получил это право .. но почему бы не продолжать использовать 1 строку в качестве входных данных и на стороне сервера, разделить его на ''. получить список параметров? Возможно, я не слишком хорошо тебя понял .. – LiranBo

+0

@ LiranBo да, я понял, что это плохо написано. Сейчас я так делаю. Последняя часть пути 'bar1, bar2, bar3' Я просто храню в виде строки и разбиваю на запятую. Я не знал, есть ли способ для JAX-RS, способный обойтись без разделения – sreya

ответ

0

проблемы является то, что вы должны изменить процесс десериализации этой переменной. Обычно только параметры запроса являются списками, поэтому это может быть несовместимо с некоторыми библиотеками. Вы могли:

  • Захват параметр в виде строки и разобрать его внутри с помощью вспомогательного метода (очевидном)
  • Создайте свою собственную аннотацию, как @PathParamMutli и вернуть Arrays.asList(parameter.split(","));. В идеале у вас должен быть доступ к исходным кодам рамок и привилегии ветвления.

  • Используйте параметр запроса вместо

Смежные вопросы