【问题标题】:Grails - render validation errors as JSONGrails - 将验证错误呈现为 JSON
【发布时间】:2014-09-19 15:50:50
【问题描述】:

我正在构建一个 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".

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

【问题讨论】:

  • 您尝试将 contentType 更改为 text/json,是吗?
  • 是的。我得到一个例外:java.lang.IllegalArgumentException: Array elements must be defined with the "element" method call eg: element(value)

标签: rest grails grails-2.0


【解决方案1】:

怎么样?

render eventSaleDataCommand.errors.fieldErrors as JSON

【讨论】:

  • 对于一些非常简单的情况(例如唯一约束),此 JSON 输出非常冗长和神秘。我不适合此评论中的示例。一个简单的域类上的单个唯一约束违反超过一千个字符,并且看起来像堆栈跟踪。我不能推荐这种方法。
猜你喜欢
  • 2014-08-11
  • 2010-12-30
  • 1970-01-01
  • 2013-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多