7

Play Frameworkを初めて使用し、JSONオブジェクトのレンダリングに問題があります。

public static void LoginFail() {

 Object[][] statusArray = {

   {"Status", "401"},
   {"Message", "Unauthorized"},
         {"Detail", "No API Key Supplied"}

    };

 renderJSON(statusArray);

}

これは表示されるだけ[[{},{}],[{},{}],[{},{}]]です...私は何が間違っているのですか?これに関する確かなドキュメントは見つかりません。のルートを設定しようとしましApplication.LoginFail(format:'json')たが、何もしませんでした。

4

4 に答える 4

14

StatusMessageオブジェクトを作成して、シンプルで再利用可能な方法にします

public class StatusMessage {
   public String status;
   public String message;
   public String detail;

   public StatusMessage(String status, String message, String detail) [
      this.status = status;
      this.message = message;
      this.detail = detail;
   }
}

その後

renderJSON(new StatusMessage("401", "Unauthorized", "No API Key Supplied"));
于 2010-09-17T05:52:57.260 に答える
11

コードの外観から、Object型の配列を使用して自分でJSON文字列を作成しようとしているようです。これが機能しない理由についての私の唯一の推測は、GSON(playで使用されているJSONライブラリ)がそれをキーと値のペアに変換する方法を知らないということです(配列は2次元ですが)。statusArrayでは、Stringとそのコンテンツを次のように変更するのはどうでしょうか。

{
    "Status": "401",
    "Message": "Unauthorized",
    "Detail": "No API Key Supplied"
}

それを入れれrenderJSON(statusArray)ば大丈夫です。

.json別の方法として、次のような単純なテンプレートを作成できます。

{
    "Status": ${status},
    "Message": ${message},
    "Detail": ${detail}
}

コントローラメソッドから。を介して呼び出しますrender(status, message, detail)status、ここでも文字列ですmessagedetailコントローラメソッドの例:

public static void loginFail(final String status, final String message, final String detail) {
    render(status, message, detail);
}

テンプレートが呼び出されますloginFail.json(コントローラーメソッドの名前)。そうすれば、ログインを確認するために必要なロジックでコントローラーメソッドを呼び出すことができます。ログインが失敗したら、loginFailメソッドを呼び出して、その理由を(ステータス、メッセージ、および詳細を介して)指定します。

于 2010-09-16T10:13:18.423 に答える
0

この場合の最良の方法は、HashMapを使用することです。

public static void LoginFail() {
    Map<String, String> status = new HashMap<String, String>();

    status.put("Status", "401");
    status.put("Message", "Unauthorized");
    status.put("Detail", "No API Key Supplied");

    renderJSON(status);
}

別の戦略を使用することもできます。これは、返したいものの定義を使用してオブジェクトを定義し、これをレンダリングすることです。

public class Status{

    public String status, message, detail;

    public Status(String status, String message, String detail){
        this.status = status;
        this.message = message;
        this.detail = detail;
    }
}

public static void LoginFail(){
    Status status = new Status("401", "Unauthorized", "No API Key Supplied");

    renderJSON(status);
}
于 2013-04-04T18:35:13.237 に答える
0

これがあなたにできることです

import play.libs.Json;

ブラウザからJSONをHTTPボディとして読んでいる場合は

 JsonNode json = request().body().asJson();     
 Program program  = Json.fromJson(json, Program.class);

ここで、Programはエンティティクラスまたはデータトランスポートオブジェクトにすることができます。

レコードをフェッチしてJSONでブラウザに送信する必要がある場合は、次のようにします

  Program program = ProgramDAO.findById(id);
        if(program!=null){
            result = ok(Json.toJson(program));
        }

お役に立てれば

于 2015-04-23T08:16:52.997 に答える