Play Framework renderJSON问题

7 java json playframework

我是Play Framework的新手,在渲染JSON对象时遇到问题.

public static void LoginFail() {

 Object[][] statusArray = {

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

    };

 renderJSON(statusArray);

}
Run Code Online (Sandbox Code Playgroud)

这只显示[[{},{}],[{},{}],[{},{}]]......我做错了什么?我找不到任何有关此问题的可靠文档.我尝试配置路由Application.LoginFail(format:'json'),但这没有做任何事情.

Dam*_*amo 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;
   }
}
Run Code Online (Sandbox Code Playgroud)

然后

renderJSON(new StatusMessage("401", "Unauthorized", "No API Key Supplied"));
Run Code Online (Sandbox Code Playgroud)


seb*_*seb 11

从您的代码看起来,您似乎正在尝试使用Object类型的数组自己创建一个JSON字符串.我唯一的猜测是为什么这不起作用是GSON(播放使用的JSON库)不知道如何将其转换为键值对(尽管你的数组是二维的).那么如何statusArray将String及其内容更改为:

{
    "Status": "401",
    "Message": "Unauthorized",
    "Detail": "No API Key Supplied"
}
Run Code Online (Sandbox Code Playgroud)

把它放进去renderJSON(statusArray)你应该没问题.

作为替代方案,您可以创建一个简单的.json模板,如下所示:

{
    "Status": ${status},
    "Message": ${message},
    "Detail": ${detail}
}
Run Code Online (Sandbox Code Playgroud)

并通过控制器方法调用它render(status, message, detail).status,messagedetail在这里成为字符串.示例控制器方法:

public static void loginFail(final String status, final String message, final String detail) {
    render(status, message, detail);
}
Run Code Online (Sandbox Code Playgroud)

并调用您的模板loginFail.json(控制器方法的名称).这样,您可以使用任何逻辑调用控制器方法来验证登录.登录失败后,您可以通过调用loginFail方法指定原因(通过状态,消息和详细信息).

  • 值得注意的是renderJSON也可以采用String参数,绕过GSON解析.如果你使用Jackson这样的东西进行JSON解析(就像我一样),这很有用. (3认同)