一 点睛
spring boot 默认情况下会映射到 /error 进行异常处理,但是提示并不十分友好,下面自定义异常处理,提供友好展示。
二 自定义异常类
在 common-util 模块添加 SdgtException 类
@Data
@ApiModel(value = "自定义全局异常类")
public class SdgtException extends RuntimeException {
@ApiModelProperty(value = "异常状态码")
private Integer code;
/**
* 通过状态码和错误消息创建异常对象
*
* @param message 错误消息
* @param code 错误码
*/
public SdgtException(String message, Integer code) {
super(message);
this.code = code;
}
/**
* 通过结果枚举类型对象创建异常对象
*
* @param resultCodeEnum 结果枚举类型
*/
public SdgtException(ResultCodeEnum resultCodeEnum) {
super(resultCodeEnum.getMessage());
this.code = resultCodeEnum.getCode();
}
@Override
public String toString() {
return "SdgtException{" +
"code=" + code +
", message=" + this.getMessage() +
'}';
}
}
三 添加全局异常处理类
在 common-util 模块添加全局异常处理类
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public Result error(Exception e) {
e.printStackTrace();
return Result.fail();
}
/**
* 功能描述:自定义异常处理方法
*
* @param e 自定义异常处理类
* @return Result 统一返回结果
* @author 贝医
* @date 2021/10/6
*/
@ExceptionHandler(SdgtException.class)
@ResponseBody
public Result error(SdgtException e) {
e.printStackTrace();
return Result.fail();
}
}
四 测试
1 测试代码
// 5 根据 id 获取医院
@GetMapping("getHospSet/{id}")
public Result getHospSet(@PathVariable Long id) {
try {
//模拟异常
int a = 1/0;
}catch (Exception e) {
throw new SdgtException("失败",201);
}
Hospital hospital = hospitalService.getById(id);
return Result.ok(hospital);
}
2 swagger的 测试结果
{ "code": 201, "message": "失败", "data": null, "ok": false }