2010-01-25 93 views
47

在Java方法中,我想使用Jersey客户端对象在REST风格的Web服务(也使用Jersey编写)上执行POST操作,但不知道如何使用客户端发送将在服务器上用作FormParam的值。我能够发送查询参数就好了。使用Jersey客户端执行POST操作

在此先感谢。

回答

70

我自己还没有做过这件事,但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); 

那任何帮助吗?

+2

链接POST请求,现在是可操作的 – orique 2013-12-11 12:29:20

2

你也可以试试这个:如果你需要做一个文件上传

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

,你需要使用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); 
33

从泽西岛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

最简单的:

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

现在在Jersey Client documentation

实施例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); 
+0

不Jersey客户端自动转换返回类型为'MyJAXBBean.class'?如何实现这一目标? – DerekY 2015-06-30 02:58:06

+0

调用链的最后一个参数是一个类,告诉Jersey将响应内容映射到MyJAXBBean对象。你也可以将它映射到一个字符串,并用你自己选择的工具反序列化它。 – otonglet 2015-06-30 15:30:41

相关问题