全局异常处理

全局异常处理

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());
    }
}
相关推荐
跟着珅聪学java19 分钟前
HttpServletRequest中的 Attribute(属性)生命周期和作用域是 Java Web 开发中的重要概念
java
m0_4955627840 分钟前
Swift-static和class
java·服务器·swift
合作小小程序员小小店1 小时前
web网页开发,在线物流管理系统,基于Idea,html,css,jQuery,jsp,java,SSM,mysql
java·前端·后端·spring·intellij-idea·web
这周也會开心2 小时前
SpringMVC整理
java·springmvc
東雪木2 小时前
Spring Boot 2.x 集成 Knife4j (OpenAPI 3) 完整操作指南
java·spring boot·后端·swagger·knife4j·java异常处理
数学难2 小时前
Java面试题2:Java线程池原理
java·开发语言
Charles_go2 小时前
C#8、有哪些访问修饰符
java·前端·c#
qwer12321ck762 小时前
srcType instanceof Class 及泛型 vs 普通类
java
咸鱼求放生2 小时前
Java 8 Stream API
java·开发语言
moiumxf0278q2 小时前
C++中智能指针是如何工作的?
java·jvm·c++