为了全局处理错误(例如HTTP 404),这些错误可能发生在Controller之外,我在web.xml中有类似以下的条目:
在这种错误处理程序中有没有办法确定并/或以原始请求所请求的适当内容类型进行响应?
为了全局处理错误(例如HTTP 404),这些错误可能发生在Controller之外,我在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(没有文件扩展名))在这种错误处理程序中有没有办法确定并/或以原始请求所请求的适当内容类型进行响应?