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 库)不知道如何将其转换为键值对(尽管您的数组是二维的)。那么如何更改statusArray为 String 及其内容:

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

把它放进去renderJSON(statusArray),你应该没事的。

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

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

并通过控制器方法调用它render(status, message, detail)statusmessage并且detail在这里也是字符串。示例控制器方法:

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 回答