Grails:如何根据格式(JSON,HTML)提供对错误500的不同响应?

时间:2012-09-22 12:51:03

标签: grails url-mapping

根据请求的格式,当发生错误500时,我正在尝试在Grails中提供不同的响应。

我已经创建了一个ErrorController,我在URLMappings中使用它但是我没有得到正确的请求格式:

def handle() {
    withFormat {
        html {
            response.status = 500
            render(view:'/errors/serverError')
        }
        json {
            response.setContentType "application/json; charset=utf-8"
            response.status = 500
            ApiResponse apiResponse = new ApiResponse(
                meta: new ApiMeta(
                    code: 500,
                    errorType: "Whatever",
                    msgs: ["${request.exception}"]
                )
            )
            render apiResponse as JSON
    }
    }
}

响应总是在html中。也尝试使用'request.withFormat'获得相同的结果。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

我没有足够的信息来验证这是否真的是原因,但它看起来像是MIME类型问题。 json是否在Config.groovy中正确配置为MIME类型?您的客户端是否接受您的MIME类型。请参阅此链接以获取参考http://grails.org/doc/2.1.0/guide/single.html#contentNegotiation

答案 1 :(得分:1)

我不确定这是否可以解决您的问题......但请尝试在URLMapping中进行错误处理,如http://grails.org/doc/latest/guide/theWebLayer.html#mappingToResponseCodes

中所示

您可以从您的操作中捕获任何异常,并在格式请求为JSON时抛出异常作为JSONException。

"500"(controller: "error", action: "handleJsonException", exception: JSONException)
"500"(controller: "error", action: "handleHtmlException")
相关问题