【问题标题】:How to make method POST in grails?如何在grails中制作方法POST?
【发布时间】:2019-04-04 05:33:52
【问题描述】:

我创建了一种方法并从 Postman 客户端 (POST) 调用调用,但它无法识别它,我在 URL 中没有参数我正在将数据传递给正文,但仍将其视为 GET 调用。 任何帮助表示赞赏 我在控制器动作上定义了下面的代码,

@RestApiMethod(verb = RestApiVerb.POST)

也按照Grails Allowedmethods 尝试过,但它不起作用。 到目前为止,我的 UrlMapping,

 "/api/guest/v1/$aController/$aAction?(.$format)?"{
        controller ={ "${params.aController}Api" }
        action = { "${params.aController}_${params.aAction.replaceAll("-","_")}" }
        view = null
    }

我使用的是 Grails 2.5.1 版本。

我必须做哪些其他更改才能使我的方法成为 POST ?

【问题讨论】:

    标签: java rest post grails groovy


    【解决方案1】:

    由于您没有提及有关您的环境的任何内容(grails 版本、url 映射等),因此很难看出是什么导致了您的应用程序出现问题。

    @RestApiMethod(verb = RestApiVerb.POST) 注解与 grails 如何处理请求没有任何关系,它甚至不是 grails 框架的一部分。我能找到的唯一参考是五年前的一个非常古老的 rest-api-doc 插件。

    尝试将 url 路径的新条目添加到 UrlMappings 文件,例如:

    /my_path/my_action controller: 'myController', action: 'myAction', method: 'POST'

    更新:

    看不出为什么你需要在你的 UrlMapping 中做这样的事情。 UrlMapping 人工制品上有两个内置变量:controlleraction,因此您无需执行任何其他操作即可识别它们。

    网址映射:

    "/api/guest/v1/${controller}/${action}?(.$format)?" {
        constraints {
            // apply constraints here
        }
    }
    

    控制器代码:

    package rest.api.test
    
    import grails.compiler.GrailsCompileStatic
    import grails.converters.JSON
    
    @GrailsCompileStatic
    class RestApiController {
    
        static allowedMethods = [index: 'GET', show: 'GET', save: 'POST',
                                 update: 'PUT', delete: 'DELETE']
    
        def index() {
            renderJson()
        }
    
        def show() {
            renderJson()
        }
    
        def save() {
            renderJson()
        }
    
        def update() {
            renderJson()
        }
    
        def delete() {
            renderJson()
        }
    
        private void renderJson() {
            log.info("Receive data: ${params}")
            render([controller: controllerName, action: actionName, uri: actionUri] as JSON)
        }
    
    }
    

    controller 将是您的控制器名称,action 将是该控制器内的方法名称。因此,如果您有RestApiController 和方法save,则路径将是/api/guest/v1/restApi/save

    allowedMethods 将确保方法(操作)仅响应正确的 HTTP 方法,例如在上面的控制器代码中,如果您尝试对 /api/guest/v1/restApi/save 进行 GET,您将获得 HTTP 405(方法不是允许)。

    更多详情请访问grails documentation

    【讨论】:

    • 更新我的问题,抱歉。
    • 有什么理由需要在 UrlMappings 中使用这个$aController/$aAction?(.$format)?
    • 可能是因为我将控制器扩展到 RestFulController。
    • 我按照你的解释试过了,但似乎不起作用。
    • 如果添加allowedMethods 仍然对您的控制器没有任何影响,那么肯定有问题。您必须调查应用程序中的其他因素并使用 postman 或 curl 等工具调试控制器或为其编写单元测试。我已经在一个新的 grails 项目上测试了上面的代码,没有任何问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 2019-05-16
    相关资源
    最近更新 更多