Java 防止Tomcat覆盖控制器通知返回的错误响应

Java 防止Tomcat覆盖控制器通知返回的错误响应,java,spring-boot,tomcat,Java,Spring Boot,Tomcat,我已经实现了一个RestControllerAdvice,用于处理Spring Boot Tomcat Web应用程序中的异常,如下所示: @RestControllerAdvice public class ExceptionHandlerRest{ private Logger logger=LoggerFactory.getLogger(getClass()); @ExceptionHandler(Exception.class) public ResponseEntity<

我已经实现了一个RestControllerAdvice,用于处理Spring Boot Tomcat Web应用程序中的异常,如下所示:

@RestControllerAdvice 
public class ExceptionHandlerRest{
 private Logger logger=LoggerFactory.getLogger(getClass());

 @ExceptionHandler(Exception.class)
 public ResponseEntity<?> handleException(Exception ex){
  logger.error("System Error", ex);
  SimpleResponse=new SimpleResponse(ex.getMessage(),"Error code 001"));
  return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response);
 }

}

我已经指出了调试点,并观察到代码流确实正确地到达RestControllerAdvice的handleException返回语句。我想tomcat是如何忽略我的响应并显示异常堆栈跟踪的。如何使我的应用程序以json格式返回错误消息?

我可以解决这个问题。这个问题发生在用@RequestMapping(products=MediaType.application\u pdf\u value)注释的rest控制器上。当错误被抛出并被错误处理程序接收时,由于实际控制器的products属性,POJO并没有被转换为JSON。我删除了products属性,而是显式地将内容类型设置为response。现在,两种方案都运行良好,下载pdf或显示异常消息。

是的,我确定。我调试了异常处理程序并正确返回POJO响应,但tomcat是如何忽略它并显示默认错误页面的呢?这是在嵌入式tomcat上还是在外部tomcat上?(顺便说一句,我注意到了你的最后一段,这就是为什么我删除了我的原始评论。)是的,嵌入式tomcatI无法用你提供的代码重现这一点,所以我猜错误在别处。什么是
BaseScreeningException
?这是在您的异常处理程序中抛出的吗?当rest控制器看到一些错误请求时,它会被抛出
public class SimpleResponse{
   String technicalMessage,userMessage;

   //public getters and setters


}