本文详细介绍了在Java Spring Boot项目中如何统一处理各种类型的异常,包括IllegalArgumentException、ServiceException和未知Exception,通过使用@RestControllerAdvice注解和@ExceptionHandler方法实现全局异常捕获,并返回定制化的错误信息。
package com.test.util
@RestControllerAdvice(basePackages = "com.test.controller")
public class ApiWebExceptionHandler {
private final Logger log = LoggerFactory.getLogger(this.getClass());
@ExceptionHandler(value = {IllegalArgumentException.class})
@ResponseStatus(HttpStatus.OK)
public ApiResultMessage illegalArgumentException(IllegalArgumentException ex) {
return ApiResultMessage.error(Errors.ERROR_BAD_REQUEST, "系统异常");
}
//业务部分
@ExceptionHandler({ServiceException.class})
@ResponseStatus(HttpStatus.OK)
public ApiResultMessage exception(ServiceException e) {
String message = e.getMessage();
if (StringUtils.isEmpty(message)) {
message = e.getCause().toString();
}
log.info("全局异常信息 ServiceException={}", e);
return ApiResultMessage.error(e.getCode(), message);
}
@ExceptionHandler(value = {Exception.class})
@ResponseStatus(HttpStatus.OK)
public ResultMessage unknownException(Exception ex) {
log.error("系统异常", ex);
return ResultMessage.error(Errors.ERROR_SYSTEM_EXCEPTION, "系统异常");
}
}