我习惯做ROR,但我需要在Java环境中创建RESTfull WebService。所以我决定尝试玩Play!因为它看起来真的很棒。
所以我试图找到一种方法将JSON添加到我已经存在的firstapp中,按照这些说明完成:http://www.playframework.org/documentation/2.0.3/JavaTodoList
我想要的是与ROR类似的工作。至少,我希望能够通过以下方式获得JSON支持:
所以我尝试了一些像这样的脏东西:
JsonNode json = request().body().asJson();
if(json != null) {
return ok(Json.toJson(Task.all()));
}
return ok(
views.html.index.render(Task.all(), taskForm)
);
现在显然不能正常工作......
我需要检测客户端要求的类型。我看到有些人正在添加这样的脏路线:
POST /bars BarController.index()
GET /bars.json BarController.indexJSON()
但显然不支持使用header指定json请求的客户端...
所以,我需要的是某种方式来找出是否有任何Header指定内容类型或Accept application / json。如果是这样,BarController.index()将返回BarController.indexJSON()......
总而言之,它与ROR非常相似:
respond_to do |format|
format.html # index.html.erb
format.json { render json: @bars }
end
总而言之:
有没有人经历过与我相同的推理并达到目的?
答案 0 :(得分:0)
所以我通过在控制器中使用来解决我的问题,如下所示:
public static Result index()
public static Result indexJSON()
然后我添加了路线:
GET /tasks controllers.TaskController.index()
GET /tasks/json controllers.TaskController.indexJSON()
我会更喜欢task.json,但它不会允许/tasks/:id.json ...
对于Header支持,如果没有标题,您需要检查您的经典函数:
public static Result index() {
if (request().getHeader(play.mvc.Http.HeaderNames.ACCEPT).equalsIgnoreCase("application/json") || request().getHeader(Http.HeaderNames.CONTENT_TYPE).equalsIgnoreCase("application/json")) {
return indexJSON();
}
else {
return ok(
views.html.index.render(Task.all(), taskForm)
);
}
}
结束那是所有人!
有人有更好的解决方案吗?我不太喜欢这个...因为我要重复许多代码......