Я использую клиент Jersey (v 1.17.1) для связи с удаленным сервером, который не находится под моим контролем (поэтому я не вижу входящие запросы).
Мне нравится отправлять запрос POST с данными JSON, который имеет структуру, аналогичную этому примеру:
{"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 — Bad Request («Запрос, отправленный клиентом, был синтаксически неправильным (Bad Request)»). Я предполагаю, что обязательный элементы параметров не отправляются правильно.
Кто-нибудь знает, как я вставляю данные JSON, как описано? Я думаю, что это распространенный случай, но я не нашел примеров в Интернете.