Использование клиента Джерси для выполнения почтовой операции
в методе Java я хотел бы использовать объект клиента Jersey для выполнения операции POST на веб-службе RESTful (также написанной с использованием Jersey), но не уверен, как использовать клиент для отправки значений, которые будут использоваться в качестве FormParam на сервере. Я могу отправить запрос params просто отлично.
6 ответов:
еще не сделал этого сам, но быстрый бит 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.х,
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"
.
теперь это первый пример в Джерси о клиенте
пример 5.1. Отправить запрос с параметрами формы
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);
Если вам нужно сделать загрузку файла, вам нужно будет использовать 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);