代码之家  ›  专栏  ›  技术社区  ›  gjvatsalya

Grails 2.5.5:无法访问PUT请求的请求体?

  •  0
  • gjvatsalya  · 技术社区  · 7 年前

    我试图使用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"
    }  
    

    感觉我被困在地狱里了!

    0 回复  |  直到 7 年前
    推荐文章