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

これで問題が解決するかどうかはわかりませんが、http://grails.org/doc/latest/guide/theWebLayer.html#mappingToResponseCodes でわかるように、URLMapping でエラー処理を試してください。

フォーマット要求が JSON の場合、アクションから例外をキャッチし、JSONException として例外をスローできます。

"500"(controller: "error", action: "handleJsonException", exception: JSONException)
"500"(controller: "error", action: "handleHtmlException")
于 2012-09-30T18:00:34.340 に答える
1

これが本当に原因かどうかを確認するのに十分な情報はありませんが、MIME タイプの問題のように見える可能性があります。Config.groovy で json が MIME タイプとして正しく構成されていますか? クライアントは MIME タイプを受け入れますか。このリンクを参照してください http://grails.org/doc/2.1.0/guide/single.html#contentNegotiation

于 2012-09-23T10:16:14.967 に答える