由于您没有提及有关您的环境的任何内容(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 人工制品上有两个内置变量:controller 和 action,因此您无需执行任何其他操作即可识别它们。
网址映射:
"/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。