我正在使用命令对象在Grails restfull控制器上执行数据绑定,如上例所示:
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+在这种情况下的表现是否不同。
到目前为止,在respod上使用“ excludes”参数无效。
我尝试了以下选项:
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"
},
]
}