首先编写一个自定义异常
注意:若继承Exception则异常抛出时会被包装成 java.Tang.reflect.UndeclaredThrowableException
public class BusinessException extends RuntimeException {
public BusinessException(String message) {
super(message);
}
}
然后编写一个自定义异常处理器来处理自定义异常
注意:这里的handleException方法返回可以使用统一返回类Result来包装
@Slf4j
@Configuration
@RestControllerAdvice
@ConditionalOnWebApplication
public class MyExceptionHandler {
@ResponseBody
@ExceptionHandler({BusinessException.class})
public String handleException(BusinessException e) {
return e.getMessage();
}
@ResponseBody
@ExceptionHandler({Exception.class})
public String handleException(Exception e) {
log.error("Exception => ", e);
return "System Exception";
}
}
此时去手动抛出异常即可被处理器捕获并统一处理返回结果
适用场景:使用数据库事务未达到预期需要手动抛错回滚
throw new BusinessException("Not have permission to access!");