使用Jersey客户端进行POST操作

时间:2010-01-25 22:22:37

标签: java java-ee jersey

在Java方法中,我想使用Jersey客户端对象在RESTful Web服务上执行POST操作(也使用Jersey编写),但我不确定如何使用客户端发送将要发送的值在服务器上用作FormParam。我能够很好地发送查询参数。

6 个答案:

答案 0 :(得分:80)

我自己还没有完成这项工作,但Google-Fu的一小部分内容显示了一个tech tip on 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);

有什么帮助吗?

答案 1 :(得分:44)

从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"

答案 2 :(得分:13)

现在是Jersey Client documentation

中的第一个示例

示例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);

答案 3 :(得分: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);

答案 4 :(得分:3)

最简单的:

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);

答案 5 :(得分:2)

你也可以试试这个:

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