Я обнаружил, что лучший способ отправить список через 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]
.Вам придется разделить строку на стороне сервера в «,» и обрезать квадратные скобки для извлечения из нее отдельных записей.