【发布时间】:2018-06-20 08:54:58
【问题描述】:
我已经实现了一个 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);
}
}
因此,每当 Web 请求导致异常时,我希望上面的处理程序返回状态 500 和包含内容的 json:"{"technicalMessage":"NullPointerException","userMessage":"Error Code 001"}
然而,一个 html 错误页面正在打印整个堆栈跟踪,如下所示:
SimpleResponse 的定义如下:
public class SimpleResponse{
String technicalMessage,userMessage;
//public getters and setters
}
我已经放置了调试点,并观察到代码流确实可以正确地返回 RestControllerAdvice 的 handleException 语句。我认为一些tomcat如何忽略我的响应并显示异常堆栈跟踪。如何让我的应用程序以 json 格式返回错误消息?
【问题讨论】:
-
是的,我确定。我调试并控制到异常处理程序并正确返回 POJO 响应,但有些 tomcat 忽略它并显示默认错误页面
-
这是在嵌入式 Tomcat 上还是在外部 Tomcat 上? (PS。我注意到你的最后一段,所以我删除了我原来的评论。)
-
是嵌入式tomcat
-
我不能用你提供的代码重现这个,所以我猜错误在别处。
BaseScreeningException是什么?这是在您的异常处理程序中抛出的吗? -
当它看到一些错误的请求时,它被休息控制器抛出
标签: java spring-boot tomcat