Я пытаюсь реализовать 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!