Поскольку вы ничего не упоминаете о своей среде (версия 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
, поэтому вам не нужно ничего делать, чтобы их распознать.
UrlMapping:
"/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, например, вприведенный выше код контроллера, если вы пытаетесь установить GET на /api/guest/v1/restApi/save
, вы получите HTTP 405 (метод не разрешен).
Более подробную информацию можно найти в документации grails .