如何使用Jersey发布一个字符串数组

时间:2012-01-05 14:47:45

标签: java arrays http jersey

我想直接使用以下内容发送String数组:

service....post(ClientResponse.class, new String[]{"one","two","three"} );

是否有MediaType可用于检索服务器上的String数组?

在我的实现中,我有一个警告说 String[]无法解析为具体类型。

如何在不将数组封装到另一个(@XmlRootElement)类的情况下发布数组?

2 个答案:

答案 0 :(得分:2)

请参阅How to return Array in Jersey REST webservice?(不完全相同,但相关)。

JAX-RS(也不是Jersey)不支持返回原始类型的List,包括String。未指定格式,因此您需要将数据封装到某些内容中并使用XML / JSON(我会这样做)或者您可以为您想要的任何内容实现MessageBodyReader / Writer(甚至是字符串数组)。见:

编辑:客户端的JSONArray:

ClientConfig cc = new DefaultClientConfig();
cc.getClasses().add(JSONArrayProvider.App.class);
Client c = Client.create(cc);

JSONArray array = new JSONArray();
array.put(1);
array.put(4);

c.addFilter(new LoggingFilter());
c.resource("http://a.cz").type(MediaType.APPLICATION_JSON_TYPE).post(array);

答案 1 :(得分:0)

您可以发送如下数组。创建一个Form对象(基本上是一个map - 它扩展了MultivaluedMapImpl)。然后添加您想要成为数组一部分的元素,如下所示。关键是将括号[]作为变量的后缀。没有括号(至少是我要去的php休息服务)认为它只是一个字符串而且只占用了最后一个值。

import com.sun.jersey.api.representation.Form;
import com.sun.jersey.api.client.WebResource;

Form form = new Form();
form.add("myArray[]", "value1");
form.add("myArray[]", "value2");
form.add("myArray[]", "value3");

webResource.post(String.class, form);