我写了一个Javax/Jersey Service。我有问题与我的@POST方法消费在Json中解析的数组列表。我无法想象为什么这行不通。什么都没发生。没有错误-什么都没有。如果我对单个对象做同样的操作,效果很好。
关于我的设置的更多信息:
jsersey-bundle-1.9.jar
asm-3.1.jar
jsr311-api-1.1.jar
set up the server with jesersy's httpserver
首先是我的应用程序做post:
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(params[0]);
String json = "";
Ding obj1 = new Ding("Sebastian", 3456, 93);
Ding obj2 = new Ding("adsasd", 12, 1);
List<Ding> list = new ArrayList<Ding>();
list.add(obj1);
list.add(obj2);
Gson gson = new Gson();
json = gson.toJson(list);
Log.d("", json);
StringEntity se = new StringEntity(json);
httpPost.setEntity(se);
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");
HttpResponse httpResponse = httpClient.execute(httpPost);
inputStream = httpResponse.getEntity().getContent();
result = read(inputStream);
json字符串看起来像:
[{"name":"Sebastian","grosse":93,"gewicht":3456},{"name":"adsasd","grosse":1,"gewicht":12}]
POST-Method接收数组:如果我用Ding ding
代替List<Ding> ding1
,一切正常。但是对于数组列表,什么都不会发生。即使没有错误。
@POST
@Path( "putArray")
@Consumes( MediaType.APPLICATION_JSON )
@Produces( MediaType.APPLICATION_JSON )
public List<Ding> putDingArray( List<Ding> ding1){
System.out.println("Los gehts: ");
for(int i = 0; i < ding1.size(); i++){
System.out.println(ding1.get(i).getName());
System.out.println(ding1.get(i).getGewicht());
System.out.println(ding1.get(i).getGrosse());
}
return ding1;
}
类Ding,不包括填充的构造函数和getter/setter
@XmlRootElement
public class Ding {
private int gewicht;
private int grosse;
private String name;
public Ding(){
}......
额外的问题:
POST是正确的方式吗?也许把?传输数组列表不常见吗?我在谷歌上找不到有用的东西…谢谢你的帮助;)
我还没有解决方案,但是一个很好的变通方法。
你可以创建一个新的对象来保存数组列表,而不是发送一个数组列表…
public class DingHolder{
private ArrayList<Ding> list = new ArrayList<Ding>();
... //getter setter constructor
然后你可以插入任意多的数组列表,甚至给这个消息一些属性…