Grails 2.5.5: невозможно получить доступ к телу запроса PUT? - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь реализовать RESTful API с использованием Grails 2.5.5 и сталкиваюсь с несколькими проблемами.

Похоже, что 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"
}

Итак, теперь первое отображение будет обрабатывать запрос GET вURL-адреса моего примера, а также другие общие 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"
}  

Такое ощущение, что я застрял в этом аду URLMappings!

...