На стороне сервера, у меня есть метод, который выглядит следующим образом:Как отправить запрос JSON, содержащий массив объектов?
@POST
@Path("/foods/{year}/{month}/{day}")
@Consumes("multipart/mixed")
@Produces("application/json; charset=UTF-8")
@Transactional
public boolean setFoodsForTheDay(@PathParam("year") int year, @PathParam("month") int month,
@PathParam("day") int day, @Multipart(value = "foodList", type = MediaType.APPLICATION_JSON) Food[] foodList) {
if (log.isDebugEnabled()) {
log.debug("list size={}", foodList.size());
}
doStuff(foodList);
}
Если я отправляю в запросе следующей POST к/продукты питания/2013/06/26 он действительно будет работать, а массив будет получить разобран правильно:
Host: localhost:7777
Accept: application/json
Content-Type: multipart/mixed; boundary=---------------------------25819220131967
Content-Length: 226
-----------------------------25819220131967\r\n
Content-Disposition: form-data; name="foodList"\r\n
Content-Type: application/json\r\n
\r\n
[ {"id":null,"name":"Banana","recipe":null} ]\r\n
-----------------------------25819220131967--\r\n
Как вы можете видеть, что это важно, чтобы отправить в многочастному/смешанная (или, возможно, многокомпонентные/форм-данных будет работать тоже), потому что тогда я могу установить Content-Type в части, и он будет правильно разобран.
Все это работает. Теперь проблема в том, что мне нужно отправить этот запрос с помощью jQuery (или любого другого инструмента Ajax), и похоже, что невозможно отправить multipart/mixed? Или есть какой-то трюк с iframe, но до сих пор не удастся установить Content-type детали.
Кто-нибудь знает о решении этой проблемы? Как я могу отправить массив объектов на сервер в сериализации JSON?
Это не работает. В Chrome у меня появляется ошибка «Недопустимый тип носителя», а в Firefox - очень длинная ошибка, которая выглядит как «компонент JavaScript не имеет метода с именем:« доступно »при вызове метода ...» Насколько я могу видеть, что была бы ожидаемой ошибкой, если бы я пытался отправить, например, запрос DELETE, и мой браузер не поддерживал это ... однако в этом случае я отправляю только обычный запрос POST. – Csaba