我正在尝试使用grails 2.3中存在的response方法返回一些JSON格式的异常消息和状态代码,但是到目前为止还没有成功返回代码..
我已经设置了一个ExceptionController,它将处理其余控制器抛出的所有异常。这是:
class ExceptionController {
static responseFormats = ['json','xml']
def handleForbiddenException(ForbiddenException e){
respond 'error':e.getMessage(),status:403
}
def handleNotFoundException(NotFoundException e){
respond 'error':e.getMessage(),status:404
}
def handleInvalidRequestException(InvalidRequestException e){
respond 'error':e.getMessage(), status:422
}
def handleGeneralException(Exception e){
respond 'error':e.getMessage(),status:500
}
}
但是在简单的集成测试中,结果代码总是200 ..
我真的不知道使用此方法设置状态代码的格式是正确的。我尝试了几种变化但没有成功
respond 'error':e.getMessage(), status:422
respond e.getMessage(), status:422
respond object:['error':e.getMessage()], arguments:[status:422]
respond object:['error':e.getMessage()], model:[status:422]
respond object:['error':e.getMessage()], [status:422]
更新我找到了一种有效的格式,但不认为这是最好的解决方案......
respond JSON.parse("{'error':'${e.getMessage().encodeAsHTML()}'}"),[status:403]
答案 0 :(得分:1)
看看https://github.com/grails/grails-core/commit/4e2f8de61f4383b92d79f5e34c3d1d0d151afb60。看来你可以使用属性errorsHttpStatus,但我在代码中读到的是你需要传递一个Errors实例而不是异常。