Я использую объект команды для выполнения привязки данных на контроллере перезапуска Grails, как в примере выше:
class BookController {
// ...
def save(BookCommand command) {
if(command.hasErrors()) {
respond command.errors
return
}
// Save a new instance of book
}
// ...
}
@Validateable
class BookCommand {
String title
Author author
static constraints = {
title nullable: false
pet nullable: false, validator: { author ->
author.enabled
}
}
}
Когда передается неверный автор, отображается Json, содержащий свойство "rejectedValue", в которое вложена вся информация об авторе.
Мы не можем предоставить их конечным пользователям.
Можно ли отфильтровать эти поля или все свойство rejectedValue?
Obs: я все еще использую Grails 2.5.6 из-за проблем с миграцией. Я не знаю, ведет ли себя Grails 3+ иначе в этом случае.
Пока что использование параметра "exclude" на respod не работает.
Я попробовал следующие варианты:
respond command.errors, [excludes: ['rejectedValue']]
respond command.errors, [excludes: ['rejected-value']]
respond command.errors, [excludes: ['errors.rejectedValue']]
================================= РЕДАКТИРОВАТЬ ============= =====================
Я написал приведенный выше пример, в котором показано отправленное тело запроса и ответы, которые я получаю в данный момент: тот, который был бы идеальным, и тот, который просто решает проблему.
Пример тела запроса:
{
"title": "How to Spy",
"author": 7
}
Тело текущего ответа:
{
"errors": [
{
"object": "com.example.Author",
"field": "author",
"rejected-value": {
"id": 7
"secretField": "Sekret info this"
"errors": {
"errors": []
},
"version": 1
},
"message": "Custom validator failed"
},
]
}
Идеальное тело ответа:
{
"errors": [
{
"object": "com.example.Author",
"field": "author",
"rejected-value": {
"id": 7
},
"message": "Custom validator failed"
},
]
}
Хорошо, тело ответа:
{
"errors": [
{
"object": "com.example.Author",
"field": "author",
"message": "Custom validator failed"
},
]
}