簡體   English   中英

澤西島客戶端:如何發布嵌套的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM