3

当根据请求的格式发生错误 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”,结果相同。

我在这里缺少什么?

4

2 回答 2

1

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

于 2012-09-23T10:16:14.967 回答
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")
于 2012-09-30T18:00:34.340 回答