在Play 2.0中使用JSON模板

时间:2012-06-29 20:21:08

标签: json templates playframework playframework-2.0

我收到此错误:

  

编译错误[package views.json.Runs不存在]

当它显然存在时。我无法弄清楚我可能做错了什么。

Runs控制器中的操作:

@BodyParser.Of(play.mvc.BodyParser.Json.class)
public static Result view(Long task_id, Long run_id) {
    Run run = Run.find.byId(run_id);
    return ok(views.json.Runs.view.render(run));
}

app/views/Runs/view.scala.json

@(run: Run)

{
    "started": "@run.started",
    "completed": "@run.completed"
}

我已经获得了一些html模板,但这是我用2.0尝试过的第一个JSON模板。我不知道还有什么可以尝试,因为它已经尽可能基本。有人有什么想法吗?

更新:我已经获得了一些解决方法的建议,但我仍然有兴趣了解如何使模板正常工作,只是为了更好地了解2.0的更改。

4 个答案:

答案 0 :(得分:7)

默认情况下,似乎只支持html,xml和txt。对于其他文件扩展名和格式,您必须在$PLAY_HOME/framework/src/sbt-plugin/src/main/scala/PlaySettings.scala中注册其他“templateTypes”(另请参阅:SBT Settings,靠近底部)。

查看$PLAY_HOME/framework/src/play/src/main/scala/play/api/templates/Templates.scala中的标准模板类型定义可能会有所帮助。

您还可以从txt文件中欺骗并提供json,但在调用response().setContentType("application/json")方法之前执行render

答案 1 :(得分:3)

对于Json,为什么不直接使用Json helper生成Json字符串:

public static Result view(Long task_id, Long run_id) {
    Run run = Run.find.byId(run_id);
    return ok(play.libs.Json.toJson(run));
}

答案 2 :(得分:2)

我建议遵循文档并让Json库序列化您的数据,而不是自己编写Json文本:See Serving Json Response

答案 3 :(得分:0)

我仍然不明白,为什么人们想要用视图渲染他们的JSON。

注意:这与@nico_ekito之前显示的方式相同,我完全赞同他,下面代码演示了如何为JSON选择对象的一部分

public static Result view(Long task_id, Long run_id){

    Run run = Run.find.byId(run_id);

    ObjectNode result = Json.newObject();
    result.put("started", run.started);
    result.put("completed", run.completed);

    return ok(Json.toJson(result));

}