10

我使用 Play 开发了一个 REST API!框架1.2.4,我非常喜欢这个框架。如果我走传统的 Java EE 路线,简单性和快速的开发周期帮助我在很短的时间内实现了这一目标。

现在我正在使用 Play 进行探索!2.0.3 用于我的下一个项目。我看到虽然框架得到了增强,并且使开发web 应用程序变得更加容易,但对于REST API却不能这么说。我的应用程序不会有任何 HTML - 我只会使用 XML 或 JSON 或我决定将来使用的任何数据交换格式进行响应。

所以,问题是:

这里有没有人使用 Play 2.0.x 来公开非 html 纯 REST API?

更多细节:

以下是我认为与 1.2.x 相比,在 Play 2.0.x 中开发纯 REST API 更加困难的一些因素。如果我错了,请纠正我的理解。

内容协商更难

在玩!1.2.4,我的内容协商被构建到框架中。有一些选项可以在路由文件中定义请求期望的内容类型。

GET /friends User.listFriends(format:'xml')

然后,在控制器中,

public static void getFriends(){
    render();
}

这将导致views/xml/User/listFriends.xml模板自动呈现。明天要添加对 JSON 的支持,我需要做的就是添加一个views/json/User/listFriends.json模板。

我不明白如何在游戏中做到这一点!2.0.x

创建非 html 模板不太直观

经过反复试验,我发现可以在视图文件夹中创建一个 listFriends.scala.xml !2.0。然后,需要在控制器代码中调用如下:

return ok(views.xml.listFriends.render());

但是,Eclipse 不喜欢这样,因为 Eclipse 不知道它,views.xml.listFriends因为它是在 play 编译完成后生成的。我在这里有什么遗漏吗?

4

2 回答 2

5

正如 Pere Villega 所解释的,但使用 Java 语法:

String xml = getXMLAsString();
return ok(xml).as("text/xml");

as() 方法Status 类的一部分。

或者,另一种选择是:

String xml = getXMLAsString();
response().setContentType("text/xml")
return ok(xml);
于 2012-09-07T13:35:08.180 回答
5

在 Play (Scala) 中,您可以执行以下操作:

val myXMl = obtainXML();
return Ok(myXML).as("text/xml")

我不确定 Java 中的语法,但它是等效的:不是创建模板,而是生成 XML,然后将其发送给用户,将返回类型设置为“text/xml”(或 json 或无论你需要什么)。

于 2012-09-07T13:01:10.850 回答