我收到此错误:
编译错误[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的更改。
答案 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));
}