我是Play Framework的新手,在渲染JSON对象时遇到问题。
public static void LoginFail() {
Object[][] statusArray = {
{"Status", "401"},
{"Message", "Unauthorized"},
{"Detail", "No API Key Supplied"}
};
renderJSON(statusArray);
}
这只显示[[{},{}],[{},{}],[{},{}]]
...我做错了什么?我找不到任何有关此问题的可靠文档。我尝试为Application.LoginFail(format:'json')
配置路由,但这没有做任何事情。
答案 0 :(得分: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"));
答案 1 :(得分:11)
从代码的外观来看,您似乎正在尝试使用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)
从控制器方法调用它。此处status
,message
和detail
也是字符串。示例控制器方法:
public static void loginFail(final String status, final String message, final String detail) {
render(status, message, detail);
}
,您的模板将被称为loginFail.json
(控制器方法的名称)。这样,您可以使用任何逻辑调用控制器方法来验证登录。登录失败后,您可以通过调用loginFail
方法指定原因(通过状态,消息和详细信息)。
答案 2 :(得分: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);
}
答案 3 :(得分:0)
这是你可以做的事情
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));
}
希望这有帮助