全局异常处理

全局异常处理

1、减少try...catch

2、统一处理注解的message

1、响应结果枚举

java 复制代码
package com.zhw.enums;

@SuppressWarnings("all")
public enum AppHttpCodeEnum {
    // 成功
    SUCCESS(200,"操作成功"),
    // 登录
    PARAM_ERROR(400,"接口参数异常"),
    NEED_LOGIN(401,"需要登录后操作"),
    NO_OPERATOR_AUTH(403,"无权限操作"),
    SYSTEM_ERROR(500,"全局捕获的系统错误"),
    USERNAME_EXIST(501,"用户名已存在"),
    PASSWORD_ERROR(504,"密码错误"),
    USER_NAME_ERROR(505,"用户名错误");
    int code;
    String msg;
    AppHttpCodeEnum(int code, String errorMessage){
        this.code = code;
        this.msg = errorMessage;
    }
    public int getCode() {
        return code;
    }
    public String getMsg() {
        return msg;
    }
}

2、新建异常类

java 复制代码
package com.zhw.exception;
import com.zhw.enums.AppHttpCodeEnum;

@SuppressWarnings("all")
public class SystemException extends RuntimeException {
    private int code;
    private String msg;

    public int getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }

    public SystemException(AppHttpCodeEnum httpCodeEnum) {
        super(httpCodeEnum.getMsg());
        this.code = httpCodeEnum.getCode();
        this.msg = httpCodeEnum.getMsg();
    }
}

3、新建全局异常处理handler

java 复制代码
package com.zhw.handler.exception;

import com.zhw.domain.ResponseResult;
import com.zhw.enums.AppHttpCodeEnum;
import com.zhw.exception.SystemException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice  // 1、全局异常处理,代替局部try catch 2、统一对message信息返回
@Slf4j
@SuppressWarnings("all")
public class GlobalExceptionHandler {

    // RequestBody 参数校验不通过处理处理
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseResult handleValidException(MethodArgumentNotValidException e) {
        // 打印异常信息
        log.error("接口参数! {}", e);
        ObjectError objectError = e.getBindingResult().getAllErrors().get(0);
        // 从异常对象中获取提示信息封装返回
        return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_ERROR.getCode(), objectError.getDefaultMessage());
    }
    @ExceptionHandler(SystemException.class)   // 指定需要处理的异常类型
    public ResponseResult systemExceptionHandler(SystemException e) {
        // 打印异常信息
        log.error("出现了异常! {}", e);
        // 从异常对象中获取提示信息封装返回
        return ResponseResult.errorResult(e.getCode(), e.getMsg());
    }

    @ExceptionHandler(Exception.class)
    public ResponseResult exceptionHandler(Exception e) {
        // 打印异常信息
        log.error("出现了异常! {}", e);
        // 从异常对象中获取提示信息封装返回
        return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR.getCode(), e.getMessage());
    }
}
相关推荐
娃哈哈哈哈呀27 分钟前
html-pre标签
java·前端·html
LanLance30 分钟前
ES101系列09 | 运维、监控与性能优化
java·运维·后端·elasticsearch·云原生·性能优化·golang
Java永无止境30 分钟前
Web前端基础:HTML-CSS
java·前端·css·html·javaweb
clk66071 小时前
Spring Boot
java·spring boot·后端
扣丁梦想家1 小时前
✅ 常用 Java HTTP 客户端汇总及使用示例
java·开发语言·http
sss191s2 小时前
Java 集合面试题 PDF 及常见考点解析与备考指南
java·开发语言·pdf
七七&5562 小时前
java面试-场景题
java·python·面试
loser.loser2 小时前
QQ邮箱发送验证码(Springboot)
java·spring boot·mybatis
誰能久伴不乏2 小时前
Qt 开发中的父类与父对象的区别和父对象传递:如何选择 `QWidget` 或 `QObject`?
java·开发语言·qt
喜欢踢足球的老罗2 小时前
在Spring Boot 3.3中使用Druid数据源及其监控功能
java·spring boot·后端·druid