我有一个带有restful端点的spring boot应用程序。我希望有一个全局错误处理程序,它基本上捕获任何异常,以便我可以管理响应(即不想在响应中公开一个大的java堆栈跟踪)
实现这一目标的最佳途径是什么?
答案 0 :(得分:5)
使用异常处理程序创建一个控制器通知类,该异常处理程序将缓存所需类型的所有异常。
@ControllerAdvice
public class GlobalExceptionHandler {
private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler(Exception.class)
public void handleAll(Exception e) {
log.error("Unhandled exception occurred", e);
}
}
如果您愿意,可以从方法返回一个正文,就像从常规控制器方法中返回一样,或者只返回一些HTTP状态代码。上面的代码使用@ResponseStatus
注释返回500。
您只能捕获特定的异常类型。 @ExceptionHandler
注释接受一组例外作为值属性。