我试图使用Grails 2.5.5实现RESTful API,但遇到了一些问题。
Grails似乎不会自动为相应的HTTP方法映射任何方法,所以我正在编辑
UrlMappings.groovy
.
例如,以以下URL为例:
GET /v1/1/persons/ <--- List of persons
POST /v1/1/persons/ <--- Create a new person
PUT /v1/1/persons/1234 <--- Edit person with ID of 1234
以下是我的url映射:
"/v1/$appId/$controller/$action?/$id?(.$format)?" {
namespace = "v1"
}
"/v1/$appId/$controller"(action: "save", method: "POST") {
namespace = "v1"
}
"/v1/$appId/$controller/$id"(action: "update", method: "PUT") {
namespace = "v1"
}
现在,第一个映射将处理示例URL中的GET请求以及其他通用URL。
第二个映射将处理示例url中的第二个url。
最后,第三个映射处理示例url中的第三个url。
我现在面临的问题是,我的命令对象没有正确绑定到PUT请求。然而,POST请求可以正常工作。
以下是我的方法:
def save(MyCommand cmd) {
// works great
}
def update(MyCommand cmd) {
// cmd properties are null
// params.id is bound though. So I'm getting the path variable.
}
正如你所见,逻辑非常简单。
但是我完全不明白为什么我不能在PUT方法中获得请求主体。
附加问题:除了此url之外,我如何让上述url工作
/v1/1/persons/1234/status
我尝试了以下映射,但似乎不起作用:
"/v1/$appId/$controller/$id/$action" {
namespace = "v1"
}
感觉我被困在地狱里了!