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

Java 如何使用Jersey发布字符串数组,java,arrays,http,jersey,Java,Arrays,Http,Jersey,我想直接使用以下方法发送字符串数组: service....post(ClientResponse.class, new String[]{"one","two","three"} ); 是否有可用于检索服务器上的字符串数组 在我的实现中,我有一个警告说String[]不能解析为具体类型。 如何发布一个数组而不将其封装到另一个(@XmlRootElement)类中?请参见(不完全是这个,但相关) JAX-RS(或Jersey)不支持返回原语类型列表,包括字符串。格式没有指定,所以您需要将数据封

我想直接使用以下方法发送
字符串数组

service....post(ClientResponse.class, new String[]{"one","two","three"} );
是否有可用于检索服务器上的
字符串数组

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

如何发布一个数组而不将其封装到另一个(
@XmlRootElement
)类中?

请参见(不完全是这个,但相关)

JAX-RS(或Jersey)不支持返回原语类型列表,包括字符串。格式没有指定,所以您需要将数据封装成某种格式,并使用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);

您可以发送如下所示的数组。创建一个表单对象(基本上是一个映射-它扩展了多值mapimpl)。然后添加要成为数组一部分的元素,如下所示。关键在于将括号[]作为变量的后缀。如果没有括号(至少是我将要使用的php rest服务),则认为它只是一个字符串,只接受最后一个值

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

谢谢你的建议。我试图将数组作为JSONArray发布,但是我需要在服务器上为JSONArray实现MessageBodyReader吗?不,JSONArray是不同的情况,它是开箱即用的。您只需要添加jersey json依赖项,它包含JSONArrayProvider,它将负责反序列化。我构造了一个JSONArray,放入一个字符串[],并将其传递给POST,但我有一个ClientHandlerException:找不到JSONArray和应用程序/json类型的messageBodyWriter。我正在使用org.codehaus.jettison.JSONArray。