我想直接使用以下内容发送String
数组:
service....post(ClientResponse.class, new String[]{"one","two","three"} );
是否有MediaType
可用于检索服务器上的String
数组?
在我的实现中,我有一个警告说 String[]
无法解析为具体类型。
如何在不将数组封装到另一个(@XmlRootElement
)类的情况下发布数组?
答案 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);