簡體   English   中英

Play Framework renderJSON問題

[英]Play Framework renderJSON Issue

我是Play Framework的新手,在渲染JSON對象時遇到問題。

public static void LoginFail() {

 Object[][] statusArray = {

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

    };

 renderJSON(statusArray);

}

這只顯示[[{},{}],[{},{}],[{},{}]] ...我做錯了什么? 我找不到任何有關此問題的可靠文檔。 我嘗試為Application.LoginFail(format:'json')配置路由Application.LoginFail(format:'json') ,但這沒有做任何事情。

通過創建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"));

從您的代碼看起來,您似乎正在嘗試使用Object類型的數組自己創建一個JSON字符串。 我唯一的猜測是為什么這不起作用是GSON(播放使用的JSON庫)不知道如何將其轉換為鍵值對(盡管你的數組是二維的)。 那么如何將statusArray更改為String及其內容為:

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

把它放到renderJSON(statusArray) ,你應該沒問題。

作為替代方案,您可以創建一個簡單的.json模板,如下所示:

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

並通過render(status, message, detail)從控制器方法調用它。 statusmessagedetail也是字符串。 示例控制器方法:

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

並且您的模板將被稱為loginFail.json (控制器方法的名稱)。 這樣,您可以使用任何邏輯調用控制器方法來驗證登錄。 登錄失敗后,您可以通過調用loginFail方法指定原因(通過狀態,消息和詳細信息)。

在這種情況下最好的是使用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);
}

這是你可以做的

import play.libs.Json;

如果您正在從瀏覽器中讀取JSON作為HTTP Body,那么

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

這里程序可以是您的實體類或數據傳輸對象。

如果您必須獲取記錄並使用JSON將其發送到瀏覽器,請執行以下操作

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

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM