JAVA全系列 教程
3762个小节阅读:7094.3k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
在前后端分离项目中,系统抛出异常时,不论是自定义异常还是程序异常,都要返回给前端一段JSON数据,以便其对用户进行提示,且JSON数据的格式和正常结果相同。
接下来我们在通用模块为整个项目做统一异常处理:
创建自定义异常类
xxxxxxxxxx
/**
* 自定义业务异常
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BusException extends RuntimeException implements Serializable {
// 状态码(成功:200,失败:其他)
private Integer code;
// 异常信息
private String message;
public BusException(CodeEnum codeEnum){
this.code = codeEnum.getCode();
this.message = codeEnum.getMessage();
}
}
创建统一异常处理器
xxxxxxxxxx
// 统一异常处理器
@RestControllerAdvice
public class GlobalExceptionHandler {
// 处理业务异常
@ExceptionHandler(BusException.class)
public BaseResult defaultExceptionHandler(HttpServletRequest req, HttpServletResponse resp, BusException e) {
BaseResult baseResult = new BaseResult(e.getCode(),e.getMessage(),null);
return baseResult;
}
// 处理系统异常
@ExceptionHandler(Exception.class)
public BaseResult defaultExceptionHandler(HttpServletRequest req, HttpServletResponse resp, Exception e) {
e.printStackTrace();
BaseResult baseResult = new BaseResult(CodeEnum.SYSTEM_ERROR.getCode(),CodeEnum.SYSTEM_ERROR.getMessage(),null);
return baseResult;
}
}
让所有项目都可以加载全局异常处理类,在通用模块创建文件resources > META-INF > spring.factories
,添加如下内容:
xxxxxxxxxx
# 启动时自动扫描全局异常处理类
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.itbaizhan.shopping_common.exception.GlobalExceptionHandler
修改返回状态码枚举类
xxxxxxxxxx
/**
* 返回状态码枚举类
*/
@Getter
@AllArgsConstructor
public enum CodeEnum {
// 正常
SUCCESS(200, "OK"),
// 系统异常
SYSTEM_ERROR(500, "系统异常"),
// 业务异常
PARAMETER_ERROR(601, "参数异常")
;
private final Integer code;
private final String message;
}
修改品牌服务代码
xxxxxxxxxx
@Service
public class BrandServiceImpl implements BrandService {
@Autowired
private BrandMapper brandMapper;
/**
* 根据id查询品牌
*/
public Brand findById(Long id){
if (id == 0){
int i = 1/0; // 模拟系统异常
}else if (id == -1){
throw new BusException(CodeEnum.PARAMETER_ERROR); // 模拟业务异常
}
return brandMapper.selectById(id);
}
}
分别访问http://localhost:8001/brand/findById?id=1,http://localhost:8001/brand/findById?id=0,http://localhost:8001/brand/findById?id=-1,查看返回结果