为了全局处理可能在控制器之外发生的错误(例如 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(无文件扩展名))
像这样的错误处理程序中是否有任何方法可以确定和/或响应原始请求中请求的适当内容类型?