Play框架CRUD操作

5

我想在Play框架中开发一个使用CRUD的RESTful应用程序。不幸的是,我找不到一种方法来定义Play路由中的DELETE和PUT。也许在Play中只有POST和GET可用?

6个回答

6

5

Play 2.x没有像1.x分支中那样的CRUD模块(我认为这是好事),如果要定义路由,使用非标准方法,如DELETEPUT,只需要在路由中使用所需的方法即可:

conf/routes:

PUT     /put-item     controllers.Application.putItem()

如果想要在浏览器中使用除了GETPOST之外的其他方法,您需要创建一个AJAX调用。这个主题有一个详细的逐步指南,您也可以使用常见的jQuery.ajax()来定义请求的type

$.ajax({
  type: "PUT",
  url: "@routes.Application.putItem()",
  data: { name: "John", location: "Boston" }
}).done(function( msg ) {
  alert( "Data Saved: " + msg );
});

感谢提供jQuery示例!(+1) - atamanroman

2
一个很好的定义方式是使用通配符(*),这将允许您使用任何有效的HTTP方法,包括您所询问的那些。
例如:
*  /items/{id}               Items.display

在路由中使用通配符可以让你更加简单灵活地定义路由,比如可以允许 GET /items/15 或 PUT /items/15 这样的请求。


1
不要忘记 OPTIONS 方法,如果你要从 Web 浏览器使用 PUT 或 DELETE。

0

这是一个示例路由器,在使用最常见的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


0

这是我为删除和更新所做的事情

 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。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接