Учитывая настройку конечной точки REST, которая сохраняет пользователя, например, можно использовать validate()
Command Object для получения конкретных кодов ошибок HTTP, которые могут быть просто возвращены Контроллер для обработки ответа?Возвращает конкретный код ошибки HTTP от Grails. Проверка объекта объекта
Я хочу, чтобы избежать ситуации, когда действие контроллера должно обрабатывать множество блоков if
, чтобы проверить конкретное сообщение об ошибке, и выполнить поиск/преобразование его в код ошибки HTTP.
Например, я хотел бы, чтобы пользовательский валидатор каким-то образом сообщил контроллеру вернуть 404, если ему не удалось найти соответствующего пользователя в базе данных.
Ниже не то, что я пробовал. Вместо этого это всего лишь доказательство концепции идеальной структуры, которую я хотел бы использовать для проверки параметров REST. Возможно, это совершенно неправильно или что есть лучший подход. Если есть, это было бы также приветствоваться.
например:
User.groovy
...
class User {
String username
static constraints = {
username unique:true
}
}
UserController.groovy
...
class UserController extends RestfulController {
def update(UserCommand userCmd) {
/*
* Not actually working code, but proof of concept of what
* I'm trying to achieve
*/
render status: userCmd.validate()
}
class UserCommand {
Long id
String username
static constraints = {
importFrom User
/*
* I also get that you can't return Error codes via the
* custom validator, but also just to illustrate what I'm
* trying to achieve
*/
id validator: {
User user = User.get(id)
if(user == null) {
return 404
}
}
}
}
}
Спасибо, я имел в виду обновление. Это выглядит многообещающим –
Не могли бы вы объяснить или указать мне некоторые документы, объясняющие параметр id id id в '' withUser'? Я понятия не имею, чего я боюсь. –
Это просто переменная, которую вы можете переопределить. Поэтому, если вы хотите искать объект по другому параметру, вы передаете это как идентификатор вместо стандартного «id». – Gregg