根据请求,采用简单的类似 REST 的方法。它的工作方式几乎与 Codemwncis 解决方案的工作方式相同,但使用 Accept 标头进行内容协商。首先是路线文件:
GET /user/{id} Application.user
POST /user/ Application.createUser
PUT /user/{id} Application.updateUser
DELETE /user/{id} Application.deleteUser
您无需在此处指定任何内容类型。恕我直言,只有当您想要某些资源具有“特殊”URI 时才需要这样做。就像声明一条通往/users/feed/
始终以 Atom/RSS 形式返回。
应用程序控制器如下所示:
public static void createUser(User newUser) {
newUser.save();
user(newUser.id);
}
public static void updateUser(Long id, User user) {
User dbUser = User.findById(id);
dbUser.updateDetails(user); // some model logic you would write to do a safe merge
dbUser.save();
user(id);
}
public static void deleteUser(Long id) {
User.findById(id).delete();
renderText("success");
}
public static void user(Long id) {
User user = User.findById(id)
render(user);
}
如您所见,我只删除了 getUserJSON 方法并重命名为 getUser 方法。为了使不同的内容类型发挥作用,您现在必须创建多个模板。每种所需的内容类型都有一个。例如:
用户.xml:
<users>
<user>
<name>${user.name}</name>
. . .
</user>
</users>
用户.json:
{
"name": "${user.name}",
"id": "${user.id}",
. . .
}
用户.html:
<html>...</html>
这种方法始终为浏览器提供 HTML 视图,因为所有浏览器都会在其 Accept 标头中发送 text/html 内容类型。所有其他客户端(可能是一些基于 JavaScript 的 AJAX 请求)都可以定义自己所需的内容类型。使用 jQuery 的 ajax() 方法,您可以执行以下操作:
$.ajax({
url: @{Application.user(1)},
dataType: json,
success: function(data) {
. . .
}
});
这应该会为您提供有关 ID 为 1 的用户的详细信息(JSON 格式)。 Play 目前原生支持 HTML、JSON 和 XML,但您可以按照以下任一方式轻松使用不同类型:官方文档或使用内容协商模块.
如果您使用 Eclipse 进行开发,我建议使用REST 客户端插件它可以让您测试您的路线及其相应的内容类型。