Использование клиента Джерси для выполнения операции POST - PullRequest
53 голосов
/ 26 января 2010

В методе Java я хотел бы использовать клиентский объект Jersey для выполнения операции POST в веб-службе RESTful (также написанной с использованием Jersey), но не уверен, как использовать клиент для отправки значений, которые будут используется в качестве FormParam на сервере. Я могу отправлять параметры запроса просто отлично.

Ответы [ 6 ]

81 голосов
/ 26 января 2010

Я еще этого не сделал, но Google-Fu покажет техническую подсказку на blogs.oracle.com с примерами того, что вы просите.

Пример взят из поста в блоге:

MultivaluedMap formData = new MultivaluedMapImpl();
formData.add("name1", "val1");
formData.add("name2", "val2");
ClientResponse response = webResource
    .type(MediaType.APPLICATION_FORM_URLENCODED_TYPE)
    .post(ClientResponse.class, formData);

что нибудь поможет?

44 голосов
/ 07 августа 2014

Начиная с Джерси 2.x класс MultivaluedMapImpl заменяется на MultivaluedHashMap. Вы можете использовать его для добавления данных формы и отправки на сервер:

    WebTarget webTarget = client.target("http://www.example.com/some/resource");
    MultivaluedMap<String, String> formData = new MultivaluedHashMap<String, String>();
    formData.add("key1", "value1");
    formData.add("key2", "value2");
    Response response = webTarget.request().post(Entity.form(formData));

Обратите внимание, что объект формы отправляется в формате "application/x-www-form-urlencoded".

13 голосов
/ 18 марта 2015

Теперь это первый пример в документации клиента Джерси

Пример 5.1. POST-запрос с параметрами формы

Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://localhost:9998").path("resource");

Form form = new Form();
form.param("x", "foo");
form.param("y", "bar");

MyJAXBBean bean =
target.request(MediaType.APPLICATION_JSON_TYPE)
    .post(Entity.entity(form,MediaType.APPLICATION_FORM_URLENCODED_TYPE),
        MyJAXBBean.class);
4 голосов
/ 05 июня 2014

Если вам нужно загрузить файл, вам нужно использовать MediaType.MULTIPART_FORM_DATA_TYPE. Похоже, что MultivaluedMap нельзя использовать с этим, поэтому вот решение с FormDataMultiPart.

InputStream stream = getClass().getClassLoader().getResourceAsStream(fileNameToUpload);

FormDataMultiPart part = new FormDataMultiPart();
part.field("String_key", "String_value");
part.field("fileToUpload", stream, MediaType.TEXT_PLAIN_TYPE);
String response = WebResource.type(MediaType.MULTIPART_FORM_DATA_TYPE).post(String.class, part);
3 голосов
/ 03 октября 2014

Простейший:

Form form = new Form();
form.add("id", "1");    
form.add("name", "supercobra");
ClientResponse response = webResource
  .type(MediaType.APPLICATION_FORM_URLENCODED_TYPE)
  .post(ClientResponse.class, form);
2 голосов
/ 08 марта 2013

Также вы можете попробовать это:

MultivaluedMap formData = new MultivaluedMapImpl();
formData.add("name1", "val1");
formData.add("name2", "val2");
webResource.path("yourJerseysPathPost").queryParams(formData).post();
...