[英]How do I POST a Pojo with Jersey Client without manually convert to JSON?
[英]Jersey client: How do I POST nested JSON data?
我正在使用Jersey(v 1.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);
我嘗試了幾種方法(例如,嵌套另一個Form對象),但總是得到相同的結果:服務器返回400-錯誤的請求(“客戶端發送的請求在語法上不正確(錯誤的請求)。”)我認為是因為強制性參數項未正確發送。
有人知道我如何像描述的那樣嵌套JSON數據嗎? 我認為這是很常見的情況,但我在網絡上找不到任何示例。
表單本質上是一個映射,將您的值限制為字符串。 您需要的是一個簡單的Map(例如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));
這樣,您可以根據需要進行盡可能多的嵌套。
或者,您可以創建一些代表數據結構的類。 澤西島將知道如何序列化它。
class Item {
String name;
int sequenceNo;
// getters & setters
}
class Data {
String customer;
String date;
List<Item> items;
// getters & setters
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.