Spring Boot全局统一异常处理器
在Spring Boot应用中,处理异常是一个非常重要的问题,因为不处理异常会导致程序出现问题。为了避免应用程序因异常而出现问题,我们需要使用一个全局统一异常处理器。
配置
- 在 Spring Boot 应用中,需要定义一个
@ControllerAdvice
注解的异常处理类,如下所示:
@ControllerAdvice
public class GlobalExceptionHandler {
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler(value = Exception.class)
public Map<String,Object> handleException(Exception ex){
Map<String,Object> result = new HashMap<>();
result.put("code","500");
result.put("msg","系统内部异常。");
return result;
}
}
该处理类使用了@ControllerAdvice
注解,表示这是一个全局的异常处理器。该处理器中定义了一个handleException
方法,该方法使用了@ResponseStatus
和@ExceptionHandler
注解。@ResponseStatus
注解用于指定返回的 HTTP 状态码,@ExceptionHandler
注解用于指定处理的异常类型,处理Exception类型的异常,并返回一个消息。
- 再次需要在应用程序的配置文件
application.yml
或application.properties
中开启全局异常处理器,如下所示:
server:
error:
include-exception: true
- 配置完成后,如果应用程序出现了未捕获的异常,就会自动跳转到全局异常处理器,返回处理的消息。
注意事项
-
在全局异常处理器中,处理异常的方式可能会影响应用程序的性能和稳定性,因此需要根据应用程序的实际情况选择合适的异常处理方式。
-
在异常处理器中,如果处理异常的代码出现了异常,会导致应用程序中断或返回异常的消息。因此,需要在代码中添加异常处理,避免出现异常的情况。
示例说明
下面是两个使用Spring Boot全局统一异常处理器的示例:
示例1:处理自定义 ApplicationException 异常
@ControllerAdvice
public class GlobalExceptionHandler {
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler(value = ApplicationException.class)
public Map<String,Object> handleException(ApplicationException ex){
Map<String,Object> result = new HashMap<>();
result.put("code",ex.getCode());
result.put("msg",ex.getMsg());
return result;
}
}
在应用程序中,抛出 ApplicationException 异常时,全局异常处理器将处理该异常,并返回指定的消息。
示例2:处理 RequestParam 的数据绑定异常
@ControllerAdvice
public class GlobalExceptionHandler {
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(value = BindException.class)
public Map<String,Object> handleException(BindException ex){
Map<String,Object> result = new HashMap<>();
BindingResult bindingResult = ex.getBindingResult();
String msg = bindingResult.getFieldError().getField() + bindingResult.getFieldError().getDefaultMessage();
result.put("code","400");
result.put("msg",msg);
return result;
}
}
在应用程序中,如果传递的参数不正确时,会抛出数据绑定异常。全局异常处理器将处理该异常,并返回指定的消息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot全局统一异常处理器 - Python技术站