コントローラの外部で発生する可能性のあるエラー(HTTP 404など)をグローバルに処理するために、web.xmlに次のようなエントリがあります。
<error-page>
<error-code>404</error-code>
<location>/errors/404</location>
</error-page>
私のErrorControllerには、次のような対応するメソッドがあります。
@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(ファイル拡張子なし)の元のリクエスト)
このようなエラーハンドラーで、元のリクエストでリクエストされた適切なコンテンツタイプを決定および/または応答する方法はありますか?