根据请求的格式,当发生错误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'获得相同的结果。
我在这里缺少什么?
答案 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")