Play Framework 2

时间:2013-08-13 19:44:20

标签: playframework url-routing httprequest

我有一个关于最佳实践的问题:在应用程序中处理GET和POST请求的最佳方法是什么?是否应该使用两个单独的控制器方法(一个用于POST,一个用于GET)或一起处理。他们对任何一种选择都有任何优点/缺点吗?两者都是可行和有效的,我只想听听社区的意见。我正在使用play框架,但这可以适用于任何MVC框架。下面我创建了第二个选项的简单示例,仅供参考。

在路由文件中,定义了两个路由(确保POST高于GET,因此它优先),两者都指向同一个方法:

POST  /index           controllers.Application.index()
GET   /index           controllers.Application.index()

在Application控制器中,我们有一个方法:

public static Result index() {
    if (request().method().equals("POST")) {
       // bind, validate, return badRequest if hasErrors else capture and redirect
    }        
    return Results.ok(index.render("Home", Application.testForm));
}

你的想法?

2 个答案:

答案 0 :(得分:3)

我倾向于使用Rails-style routing,这使路线文件看起来像

GET    /foos          controllers.FooController.index()
GET    /foos/new      controllers.FooController.new_form()
POST   /foos          controllers.FooController.create()
GET    /foos/:id      controllers.FooController.show(id:Long)
GET    /foos/:id/edit controllers.FooController.edit_form()
PUT    /foos/:id      controllers.FooController.update(id:Long)
DELETE /foos/:id      controllers.FooController.delete(id:Long)

这使得处理Foo对象的大多数代码保持在同一个地方,并且任何实用程序方法都在附近。您可以制作更智能的Play路由器,自动设置这些路由,如Rails的资源。

答案 1 :(得分:2)

通常GETPOST做其他事情,因此如果您使用典型的REST方法进行操作,它会更舒适

GET     /objects/:id       controllers.Application.objFindSingle(id: Int)
GET     /objects           controllers.Application.objFindAll
PUT     /objects/:id       controllers.Application.objUpdate(id: Int)
POST    /objects           controllers.Application.objCreate
DELETE  /objects/:id       controllers.Application.objDelete(id: Int)
相关问题