Переслать список на веб-сервис RESTful - PullRequest
5 голосов
/ 06 июля 2010

Есть ли способ передать список методу веб-сервиса RESTFul в Джерси?Что-то вроде @PathParam ("list") Список списка?

Ответы [ 3 ]

2 голосов
/ 30 марта 2012

Надеюсь, что это поможет вам

Java-код

import java.util.List;

@Path("/customers")
public class CustomerResource {
    @GET
    @Produces("application/xml")
    public String getCustomers(
            @QueryParam("start") int start,
            @QueryParam("size") int size,
            @QueryParam("orderBy") List<String> orderBy) {
        // ...
    }
}

Передача значения из javascript с использованием AJAX

URL вызова Ajax: /customers?orderBy=name&orderBy=address&orderBy=...

1 голос
/ 10 сентября 2013

Я обнаружил, что лучший способ отправить список через POST с клиента в службу REST - это использовать @FormParam.
Если вы добавляете параметр дважды илиЧем больше раз к форме, тем больше будет список на стороне сервера.

Использование @FormParam означает, что на стороне клиента вы генерируете com.sun.jersey.api.representation.Form и добавляете некоторые параметры формы, как показано ниже.Затем вы добавляете заполненную форму к сообщению следующим образом: service.path(..) ... .post(X.class, form) (см. Пример кода).

Пример кода для клиентской стороны :

public String testMethodForList() {

    Form form = new Form();
    form.add("list", "first String");
    form.add("list", "second String");
    form.add("list", "third String");

    return service
            .path("bestellung")
            .path("add")
            .type(MediaType.APPLICATION_FORM_URLENCODED)
            .accept(MediaType.TEXT_XML)
            .post(String.class, form);
}

Пример кода для на стороне сервера :

@POST
@Path("/test")
@Produces(MediaType.TEXT_XML)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public String testMethodForList(       
    @FormParam("list") List<String> list {

    return "The list has " + list.size() + " entries: " 
           + list.get(0) + ", " + list.get(1) + ", " + list.get(2) +".";
}

Строка возврата будет:

В списке 3 записи: перваяСтрока, вторая строка, третья строка.

Примечание:

  • Типы медиа @Consumes на стороне сервера и .type()на стороне клиента должны быть одинаковыми, а также @Produces и .accept().

  • Вы НЕ можете отправлять объекты, кроме String, Integer и т. Д., Через @FormParam.В случае объекта вам придется преобразовать его в XML или JSON String и повторно преобразовать его на стороне сервера.Как конвертировать см. здесь .

  • Вы также можете передать List в форму, такую ​​как form.add(someList), но это приведет к строке, содержащей записи списка на стороне сервера.Это будет выглядеть так: [first String, second String, third String].Вам придется разделить строку на стороне сервера в «,» и обрезать квадратные скобки для извлечения из нее отдельных записей.
0 голосов
/ 06 июля 2010

Если я понимаю, что вы пытаетесь сделать, вы можете сериализовать объект List и передать его в виде строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...