Как сделать метод POST в Граале? - PullRequest
0 голосов
/ 04 апреля 2019

Я создал один метод и вызывал его с помощью вызова клиента Postman (POST), но он не распознается, у меня нет параметра в URL, я передаю данные в тело, но он все еще рассматривается как вызов GET.Любая помощь оценена, я определил ниже код на действия контроллера,

@RestApiMethod(verb = RestApiVerb.POST)

Также пробовал согласно Разрешенные методы Grails , но это не работает.Мой UrlMapping до сих пор,

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

Я использую версию Grails 2.5.1.

Какие еще изменения я должен сделать, чтобы сделать мой метод POST?

1 Ответ

0 голосов
/ 04 апреля 2019

Поскольку вы ничего не упоминаете о своей среде (версия 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 .

...