1.首先导入pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.创建全局异常处理类
@ControllerAdvice
public class GlobalExceptionHandler {
/**
* 异常返回
* @param e
* @return
*/
@ExceptionHandler(Exception.class)
@ResponseBody
public Result error(Exception e){
e.printStackTrace();
return Result.fail().message("执行异常");
}
/**
* 运算时异常返回
* @param e
* @return
*/
@ExceptionHandler(ArithmeticException.class)
@ResponseBody
public Result error(ArithmeticException e){
e.printStackTrace();
return Result.fail().message("执行特定异常");
}
/**
* 自定义异常返回
* @param e
* @return
*/
@ExceptionHandler(GuiguException.class)
@ResponseBody
public Result error(GuiguException e){
e.printStackTrace();
return Result.fail().code(e.getCode()).message(e.getMessage());
}
}
其中Result是与前端规定好的通用返回类,可以自己改成别的
3.自定义异常类
@Data
public class GuiguException extends RuntimeException {
private Integer code;
private String message;
/**
* 通过状态码和错误消息创建异常对象
*
* @param code
* @param message
*/
public GuiguException(Integer code, String message) {
super(message);
this.code = code;
this.message = message;
}
/**
* 接收枚举类型对象
*
* @param resultCodeEnum
*/
public GuiguException(ResultCodeEnum resultCodeEnum) {
super(resultCodeEnum.getMessage());
this.code = resultCodeEnum.getCode();
this.message = resultCodeEnum.getMessage();
}
@Override
public String toString() {
return "GuliException{" +
"code=" + code +
", message=" + this.getMessage() +
'}';
}
}
@Getter
public enum ResultCodeEnum {
SUCCESS(200,"成功"),
FAIL(201, "失败"),
LOGIN_MOBLE_ERROR(204,"认证失败"),
PERMISSION(205,"认证失败")
;
private Integer code;
private String message;
private ResultCodeEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
}
借用的硅谷的自定义异常
4.如何使用
在你想用的地方添加 throw new GuiguException(201,"密码错误"); 其中GuiguException为自定义类,201为状态码,密码错误为消息。
示例如下
@PostMapping("login")
public Result login(@RequestBody LoginVo loginVo) {
System.out.println("--------------");
Map<String, Object> map = new HashMap<>();
String username = loginVo.getUsername();
LambdaQueryWrapper<SysUser> lm =new LambdaQueryWrapper<>();
lm.eq(SysUser::getUsername,username);
SysUser sysUser = sysUserService.getOne(lm);
if (sysUser==null){
throw new GuiguException(201,"用户不存在");
}
}