我想在Play框架中开发一个使用CRUD的RESTful应用程序。不幸的是,我找不到一种方法来定义Play路由中的DELETE和PUT。也许在Play中只有POST和GET可用?
我想在Play框架中开发一个使用CRUD的RESTful应用程序。不幸的是,我找不到一种方法来定义Play路由中的DELETE和PUT。也许在Play中只有POST和GET可用?
你确定不能使用DELETE/PUT吗?文档说可以。
HTTP方法
HTTP方法可以是任何HTTP支持的有效方法(GET,POST,PUT,DELETE,HEAD)。
http://www.playframework.org/documentation/2.0.4/JavaRouting
Play 2.x没有像1.x分支中那样的CRUD模块(我认为这是好事),如果要定义路由,使用非标准方法,如DELETE
或PUT
,只需要在路由中使用所需的方法即可:
conf/routes:
PUT /put-item controllers.Application.putItem()
如果想要在浏览器中使用除了GET
或POST
之外的其他方法,您需要创建一个AJAX调用。这个主题有一个详细的逐步指南,您也可以使用常见的jQuery.ajax()来定义请求的type
。
$.ajax({
type: "PUT",
url: "@routes.Application.putItem()",
data: { name: "John", location: "Boston" }
}).done(function( msg ) {
alert( "Data Saved: " + msg );
});
* /items/{id} Items.display
在路由中使用通配符可以让你更加简单灵活地定义路由,比如可以允许 GET /items/15 或 PUT /items/15 这样的请求。
这是一个示例路由器,在使用最常见的HTTP动词的Play Scala应用程序中:
GET / controllers.Application.listProjects
PUT /projects/:name controllers.Application.createProject(name: String)
GET /projects/list controllers.Application.listProjects
GET /projects/:id controllers.Application.projects(id: Long)
PUT /projects/:id/:name controllers.Application.addTaskToProject(name: String, id: Long)
PATCH /tasks/:id controllers.Application.modifyTask(id: Long, color:Option[String] ?= None)
您可以在此处查看整个Play Scala示例项目:https://github.com/nemoo/play-slick3-example
这是我为删除和更新所做的事情
POST /path/:id controllers.Controller.update(id: Integer)
POST /path/:id/delete controllers.Controller.delete(id: Integer)
在控制器中只需
public static Result delete(Integer id) {
Result result = null;
if(id>0){
//your code
}
else{
result = ok("invalid id");
}
return result;
}
对于我们来说,它适用于删除和放置操作
如果您的意图仅是使用Play框架的RESTful API,并且您正在使用Java,则最好使用CXF或Spring Web服务或Jersey。Play是一个很棒的框架,但最适合与Play一起使用的是Scala。