使用Grails 2.3.6中的响应方法,使用json格式和状态代码

时间:2014-03-07 09:57:55

标签: json grails http-status-codes grails-2.3

我正在尝试使用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]

1 个答案:

答案 0 :(得分:1)

看看https://github.com/grails/grails-core/commit/4e2f8de61f4383b92d79f5e34c3d1d0d151afb60。看来你可以使用属性errorsHttpStatus,但我在代码中读到的是你需要传递一个Errors实例而不是异常。