如何从grails中的命令对象获取单个错误消息?
我看到的所有示例都使用类似于commandObject.errors.allErrors()的内容,但如果我只希望将单个错误消息读入控制器并随后传递给视图,则不执行任何操作。
有什么想法吗?
答案 0 :(得分:1)
没有heler可以作为单个错误消息获取。这是我使用的:
对于JSON:
def errors = user.errors.allErrors.collect{
['message': messageSource.getMessage(it, null) ,
'field': it.getField(),
'badValue': it.getRejectedValue()
]
}
render(status:400, contentType: "application/json"){
[message:'Failed to save', 'errors': errors]
}
对于HTML(对于大多数用户来说不是理想的错误消息是针对techincal):
flash.message = user.errors.allErrors.collect{
"Field:${it.getField()}| Error: ${messageSource.getMessage(it, null)}, value:${it.getRejectedValue()}"
}.join('\n')
答案 1 :(得分:0)
我不确定你想要检索什么“单个”错误(对于单个字段?),但只是想指出commandObject.errors的类型为org.springframework.validation.Errors
,所以请看一下此接口中声明的方法。有方法可以获得现场错误,全局错误等。如果您能澄清您的问题,我们可以提供更详细的答案..
答案 2 :(得分:0)
您希望将单个错误消息作为响应发送
看一下spring Errors
interface here。
将所有错误转换为单个错误消息,请检查@Nix answer
和
对于特定字段,您可以使用以下
Example: Consider field `status` having with invalid value.
if (instance.errors.hasFieldErrors('status')) {
instance.errors.rejectValue("status", "error.code.for.status",
[message(code: 'instance.label', default: 'Test Domain')] as Object[],
"Custom error message")
render(view: "edit", model: [instance: instance])
return
}
OR
// Will render error message corressponding to message code passed
if (instance.errors.hasFieldErrors('status')) {
instance.errors.rejectValue("status", "error.code.for.status")
render(view: "edit", model: [instance: instance])
return
}
OR
// Will render error message corressponding to message code passed
// and if not present will render default custom message passed.
if (instance.errors.hasFieldErrors('status')) {
instance.errors.rejectValue("status", "error.code.for.status",
"Custom error message")
render(view: "edit", model: [instance: instance])
return
}