Java Jersey客户端:如何发布嵌套JSON数据?
我正在使用Jersey(v1.17.1)客户端与我无法控制的远程服务器通信(因此我看不到输入请求) 我喜欢使用JSON数据发出POST请求,其结构类似于此示例: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
{"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序列号;
//接球手和接球手
}
类数据{
串客户;
字符串日期;
清单项目;
//接球手和接球手
}
我仍在寻找解决方案,但这很有帮助:它支持客户端日志记录