0

サーバー側では、次のようなメソッドがあります。

@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 リクエストを /foods/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

ご覧のとおり、multipart/mixed (または、おそらく multipart/form-data も機能する) で送信することが重要です。そうすれば、パーツの Content-Type を設定でき、正しく解析されるからです。

これはすべて機能します。問題は、このリクエストを jQuery (または他の Ajax ツール) で送信する必要があり、マルチパート/ミックスを送信できないように見えることです。または、iframe にいくつかのトリックがありますが、それでもパーツのContent-typeを設定することはできません。

この問題の解決策を知っている人はいますか? JSONシリアル化でオブジェクトの配列をサーバーに送信するにはどうすればよいですか?

4

2 に答える 2

0

はい、JQuery ajax を介して multipart/mixed を送信できますが、追加のものを追加する必要があります。

cache: false,
contentType: false,
processData: false,


$.ajax({
    url: 'php/test.php',
    data: {name: "test1", age 5},
    cache: false,
    contentType: false,
    processData: false,
    type: 'POST',
    success: function(data){
        alert(data);
    }
});
于 2013-06-27T20:54:33.533 に答える