Java ErrorPageFilter与ResponseEntityExceptionHandler冲突

Java ErrorPageFilter与ResponseEntityExceptionHandler冲突,java,spring,spring-mvc,spring-boot,Java,Spring,Spring Mvc,Spring Boot,由于我希望控制应用程序所有端点(包括未明确定义的端点)的输出,我创建了一个简单的DefaultController,如下所示 @RestController public class DefaultController { @RequestMapping("/**") public void unmappedRequest(HttpServletRequest request) { throw new ResourceNotFoundException();

由于我希望控制应用程序所有端点(包括未明确定义的端点)的输出,我创建了一个简单的
DefaultController
,如下所示

@RestController
public class DefaultController {

    @RequestMapping("/**")
    public void unmappedRequest(HttpServletRequest request) {
        throw new ResourceNotFoundException();
    }
}
我还有一个
@ControllerAdvice
错误控制器,它扩展了
ResponseEntityExceptionHandler
,并重写该类中的所有方法,特别是

@Override
protected ResponseEntity<Object> handleExceptionInternal(Exception ex, Object body, HttpHeaders headers, HttpStatus status, WebRequest request) {
    if(HttpStatus.INTERNAL_SERVER_ERROR.equals(status)) {
        request.setAttribute("javax.servlet.error.exception", ex, 0);
    }

    SearchOutput output = new SearchOutput(body);
    return new ResponseEntity<>(output, headers, status);
}
我声明了
error.whitelabel.enabled:false
并将
exclude={ErrorMvcAutoConfiguration.class}
添加到
@EnableAutoConfiguration
注释中,在独立的Tomcat容器中运行此应用程序时仍然存在两个问题:

  • ErrorPageFilter
    抱怨每次抛出
    ResourceNotFoundException
    时,由于响应已经提交,它无法转发到请求的错误页面[/something/not/existing]
  • 当浏览器(自动)请求
    favicon.ico
    时,
    调用@ExceptionHandler方法失败
    记录了
    handleExceptionInternal
    方法的错误,说明
    找不到可接受的表示形式

另外-这是处理不存在的资源的一种可接受的方法吗?

处理这种情况的最简单方法是只定义错误页面映射并拥有一个错误控制器(我更喜欢基于HTTP代码映射-更容易映射404代码,而不是抛出特定的异常)-此链接显示如何在Spring Boot中定义错误页映射。
@ExceptionHandler(ResourceNotFoundException.class)
public @ResponseBody ResponseEntity<Object> handleResourceNotFound(ResourceNotFoundException ex, WebRequest request) {
    HttpHeaders headers = new HttpHeaders();
    HttpStatus status = HttpStatus.NOT_FOUND;

    ErrorOutput out = new ErrorOutput("Resource not found", status);
    return this.handleExceptionInternal(ex, out, headers, status, request);
}