在服務器端,我有一個看起來像這樣的方法:如何發佈包含對象數組的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
正如你所看到的,在發送重要的一個多/混合(或者多/表單數據將工作太),因爲這樣我可以設置部分的內容類型,它會被正確解析。
這一切正常。現在的問題是,我需要使用jQuery(或任何其他Ajax工具)發送此請求,並且看起來不可能發送multipart/mixed?或者使用iframe有一些技巧,但仍不可能設置零件的Content-type。
有沒有人知道這個問題的解決方案?如何在JSON序列化中將對象數組發送到服務器?
這似乎並不奏效。在Chrome下我得到「無效的媒體類型」的錯誤,而在Firefox下,一個非常長的錯誤就像「JavaScript組件沒有命名的方法:」可用「'當調用方法...」 據我可以看到如果我正在嘗試發送DELETE請求,並且我的瀏覽器不支持該功能,則會出現預期的錯誤...但是,在這種情況下,我只發送一個典型的POST請求。 – Csaba