コントローラの外部で発生する可能性があります(たとえば、HTTP 404のような)エラーを処理グローバルに、私は私のweb.xmlに次のようなエントリがあります:私のErrorControllerでSpring MVC 3.2 - エラーページのコンテンツネゴシエーション?
<error-page>
<error-code>404</error-code>
<location>/errors/404</location>
</error-page>
を私はに似た、対応するメソッドを持っています次
@Controller
@RequestMapping("/errors")
public class ErrorController {
@RequestMapping(value = "/404", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<ErrorResponse> error404() {
ErrorResponse errorBody = new ErrorResponse(404, "Resource Not Found!");
return new ResponseEntity<ErrorResponse>(errorBody, HttpStatus.NOT_FOUND);
}
}
私が直面してる問題は、私が設定したContentNegotiationManager
とメッセージコンバータはこの場合に使用されていないことです。私は、リクエストがエラーページにリダイレクトされているので、コンテンツネゴシエーションで使用された元のリクエストの属性が失われ、完全に別個のリクエストとして扱われると考えられます。 (/mycontroller/badresource.jsonの元のリクエスト - >/errors/404(ファイル拡張子なし))
このようなエラーハンドラには、適切なコンテンツタイプ元のリクエストで要求されたとおりに
感謝を - ここ
は、私はそれを設定する方法をです。私はその記事を見ましたが、何かが欠けていない限り、コントローラからの例外だけを処理し、一般的なサーブレットのエラーは処理しません。また、この文脈では 'request.getRequestURI()'はあなたにエラーページのURIを与えます。元のリクエストのURIを取得するには 'req.getAttribute(" javax.servlet.error.request_uri ")'を使用する必要があるようです。ContentNegotiationManagerが使用する情報をオーバーライドして、エラーページではなく元のリクエストの情報に設定する方法があるのだろうかと思います。 – WayneC