Grails - 将验证错误呈现为JSON

时间:2014-09-19 15:50:51

标签: rest grails grails-2.0

我正在构建RESTful API,而我正在创建的端点正在使用命令对象来验证请求数据。我试图找出将验证错误呈现为json的最佳方法。对于xml响应,我遵循了Grails in Action一书中的建议并做了......

response.status = 403
    render(contentType: "text/xml") {
        errors {
            eventSaleDataCommand.errors.fieldErrors.each { err ->
                field(err.field)
                    message(g.message(error: err))
                }
            }
        }

这适用于渲染xml响应,所以我想知道渲染json响应的推荐方法是什么?

我希望能够控制错误的显示方式,以便我添加json响应:

def results = eventSaleDataCommand.errors.fieldErrors.toList()
def errors = []
for (error in results) {
    errors.add([
        'type'          : 'invalid_entry',
        'field'         : error.field,
        'rejected_value': error.rejectedValue,
        'message'       : error.defaultMessage
    ])
}
render errors as JSON

这种方法的问题是我使用Joda时间插件,因此当我尝试将地图渲染为JSON时,我得到以下异常:

Class org.codehaus.groovy.grails.web.converters.marshaller.json.GenericJavaBeanMarshaller can not access a member of class org.joda.time.tz.DateTimeZoneBuilder$PrecalculatedZone with modifiers "public".

有人知道解决这个问题吗?

1 个答案:

答案 0 :(得分:4)

怎么样?

render eventSaleDataCommand.errors.fieldErrors as JSON