В методе Java я хотел бы использовать клиентский объект Jersey для выполнения операции POST в веб-службе RESTful (также написанной с использованием Jersey), но не уверен, как использовать клиент для отправки значений, которые будут использоваться в качестве FormParam на сервере. Я могу отправить параметры запроса просто отлично.
Использование клиента "Джерси" для выполнения операции POST
Ответ 1
Не делал этого еще сам, но быстро 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);
Что любая помощь?
Ответ 2
Начиная с Jersey 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"
.
Ответ 3
Теперь это первый пример в документации клиента Джерси
Пример 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
Если вам нужно выполнить загрузку файла, вам необходимо использовать 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);
Ответ 5
Простейшие:
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);
Ответ 6
Также вы можете попробовать следующее:
MultivaluedMap formData = new MultivaluedMapImpl();
formData.add("name1", "val1");
formData.add("name2", "val2");
webResource.path("yourJerseysPathPost").queryParams(formData).post();