使用Jersey客户端执行POST操作
在Java方法中,我想使用Jersey客户端对象在REST风格的Web服务(也使用Jersey编写)上执行POST操作,但不知道如何使用客户端发送将用作FormParam在服务器上。 我能够发送查询参数就好了。
提前致谢。
我自己并没有这样做,但是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);
有帮助吗?
从Jersey 2.x开始, MultivaluedMapImpl
类被MultivaluedMapImpl
所取代。 您可以使用它来添加表单数据并将其发送到服务器:
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"
格式发送的。
它现在是Jersey Client文档中的第一个例子
例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);
如果您需要上传文件,则需要使用MediaType.MULTIPART_FORM_DATA_TYPE。 看起来像MultivaluedMap不能用于这个,所以这是一个FormDataMultiPart的解决scheme。
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);
最简单的:
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);
你也可以试试这个:
MultivaluedMap formData = new MultivaluedMapImpl(); formData.add("name1", "val1"); formData.add("name2", "val2"); webResource.path("yourJerseysPathPost").queryParams(formData).post();