3

私は Play 1.2.4 に取り組んでいます。
私は次のようにルートを設定しました:

POST    /index    Application.index(format:'json')

コントローラは次のようになります。

public static void index(String json) {

    Logger.info("content type: %s", request.contentType);
    Logger.info("json string: %s", json);
    MyObj obj = new Gson().fromJson(json, MyObj.class);
    ...
    ...
}

そして、私のcurlリクエストは次のようなものです:

curl -v -H "Content-Type: application/json" -X POST -d '{"name":"John Smith","email":"email@email.com","value1":"Value one","value2":"Value two","urls":[{"url":"http://www.google.ca"},{"url":"http://www.msn.ca"}]}' http://localhost:9000/index

MyObj には次のフィールドがあります。

public String name;
public String email;
public String value1;
public String value2;
public String[] urls;

ただし、コントローラは入力に NULL を受け取ります。私は何を間違っていますか?JSON POST リクエストを使用してオブジェクト (特に URL の配列) に変換する方法を教えてもらえますか? ありがとう!

4

3 に答える 3

7

メソッドパラメータの変数名をjsonからbodyに変更してみてください。

public static void index(String body) {

    Logger.info("content type: %s", request.contentType);
    Logger.info("json string: %s", body);
    MyObj obj = new Gson().fromJson(body, MyObj.class);
    ...
    ...
}
于 2012-08-16T19:28:21.840 に答える
2

リクエストでこれを変更する必要があります。

[{"url":"http://www.google.ca"},{"url":"http://www.msn.ca"}]

このため:

["http://www.google.ca","http://www.msn.ca"]

オブジェクトには文字列の配列があるため、そうでない場合、配列内のすべての要素が「url」と呼ばれる1つのフィールドを持つオブジェクトであると想定されます(明らかに文字列にはそのフィールドがありません)

于 2012-08-16T19:34:12.553 に答える
1

私の仮定は、リクエストにアクセスしておらず、アクセスしている文字列の値を入力していないため、NULL 入力が与えられているためです。

request().body().asJson();呼び出しを介して JSON 要求にアクセスしてみてください。

http://www.playframework.org/documentation/2.0.1/JavaJsonRequestsもご覧ください。

JSON リクエストを操作する方法について、確かなアイデアが得られるはずです。

于 2012-08-16T19:23:11.617 に答える