在Grails上响应错误时,如何过滤rejectedValue属性?

时间:2019-07-03 19:34:03

标签: grails grails-2.0 grails-controller grails-rest-api

我正在使用命令对象在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"
        },
    ]
}

0 个答案:

没有答案