Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jersey客户端:如何发布嵌套JSON数据?_Java_Json_Jersey Client - Fatal编程技术网

Java Jersey客户端:如何发布嵌套JSON数据?

Java Jersey客户端:如何发布嵌套JSON数据?,java,json,jersey-client,Java,Json,Jersey Client,我正在使用Jersey(v1.17.1)客户端与我无法控制的远程服务器通信(因此我看不到输入请求) 我喜欢使用JSON数据发出POST请求,其结构类似于此示例: {"customer":"Someone", "date":"2013-09-12", "items":[{ "sequenceNo":1, "name":"foo", "quantity":2, "price":42, "tax":{"percent":7,"name":"vat

我正在使用Jersey(v1.17.1)客户端与我无法控制的远程服务器通信(因此我看不到输入请求)

我喜欢使用JSON数据发出POST请求,其结构类似于此示例:

{"customer":"Someone",
 "date":"2013-09-12",
 "items":[{
     "sequenceNo":1,
     "name":"foo",
     "quantity":2,
     "price":42,
     "tax":{"percent":7,"name":"vat 7%"}
   },
   {
     "sequenceNo":2,
     "name":"bar",
     "quantity":5,
     "price":23,
    "tax":{"percent":7,"name":"vat 7%"}
   }
 ]
}
这是我的密码:

final Client c = Client.create();
final WebResource service = c.resource(SERVER);

final Form form = new Form();
form.add("customer", "Someone");
form.add("date", "2013-09-12");
form.add("items", XXX); // how do I do that?

final ClientResponse response = service.path("aPath").queryParam("param", "value").cookie(new Cookie("token", token))
        .type(MediaType.APPLICATION_JSON)
        .post(ClientResponse.class, form);
    final String raw = response.getEntity(String.class);
    System.out.println("Response " + raw);
我尝试了几种方法(比如嵌套另一个表单对象),但我总是得到相同的结果:服务器返回400-坏请求(“客户端发送的请求在语法上不正确(坏请求)”),我认为这是因为强制参数项没有正确发送


有人知道我是如何嵌套JSON数据的吗?我认为这是一种常见的情况,但我在web上没有发现任何示例。

表单本质上是一个将值限制为字符串的映射。您需要的是一个简单的映射(例如HashMap)。每个嵌套元素也将是一个映射。所以你会有这样的东西

Map<String, Object> data = new HashMap<String, Object>();
data.put("customer", "Someone");
data.put("date", "2013-09-12");

Map<String, Object> item1 = new HashMap<String, Object>();
item1.put("sequenceNo", 2);
item1.put("name", "foo");

data.put("items", Arrays.asList(item1));
Map data=newhashmap();
数据。放置(“客户”、“某人”);
数据出售(“日期”,“2013-09-12”);
Map item1=新的HashMap();
项目1.投入(“序列号”,2);
项目1.将(“名称”、“foo”);
data.put(“items”,Arrays.asList(item1));
这样,您可以根据需要进行尽可能多的嵌套

或者,您可以创建一些表示数据结构的类。泽西将知道如何序列化它

class Item {
  String name;
  int sequenceNo;
  // getters & setters
}

class Data {
  String customer;
  String date;
  List<Item> items;
  // getters & setters
}
类项目{
字符串名;
int序列号;
//接球手和接球手
}
类数据{
串客户;
字符串日期;
清单项目;
//接球手和接球手
}

我仍在寻找解决方案,但这很有帮助:它支持客户端日志记录