Как отфильтровать свойство rejectedValue при ответе на ошибки в Grails? - PullRequest
0 голосов
/ 03 июля 2019

Я использую объект команды для выполнения привязки данных на контроллере перезапуска 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"
        },
    ]
}
...