全局异常处理

本文档展示了如何在Java后端实现全局异常统一处理,包括创建返回结果类`Result`,自定义异常`CustomException`,以及使用`@ControllerAdvice`注解的`GlobalExceptionHandler`来捕获并处理异常。通过这种方式,可以方便地管理和返回一致的错误信息,提高代码的可维护性和用户体验。

全局异常处理

在开发中总是会出现各种各样的异常,处理起来比较麻烦,为了解决这种问题,我们使用全局异常统一处理

返回结果类

public class Result implements Serializable {


    /**
     * 成功--不携带数据
     *
     * @return
     */
    public static Result success() {
        return new Result(ResponseStatusCode.SUCCESS_CODE.getCode(), ResponseStatusCode.SUCCESS_CODE.getMsg());
    }

    /**
     * 成功--携带数据
     *
     * @param data
     * @return
     */
    public static Result success(Object data) {
        return new Result(ResponseStatusCode.SUCCESS_CODE.getCode(), ResponseStatusCode.SUCCESS_CODE.getMsg(), data);
    }


    /**
     * 失败
     *
     * @param msg
     * @return
     */
    public static Result fail(String msg) {
        return new Result(ResponseStatusCode.FAIL_CODE.getCode(), msg);
    }

    /**
     * 失败
     *
     * @param code
     * @param msg
     * @return
     */
    public static Result fail(Integer code, String msg) {
        return new Result(code, msg);
    }

    private Integer code;  //状态码
    private String msg;  //消息
    private Object data; //数据

    public Result() {
    }

    public Result(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public Result(Integer code, String msg, Object data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}

自定义异常

public class CustomException extends RuntimeException {

    private Integer code;
    private String message;


    public CustomException(Integer code, String message) {
        super(message);
        this.message = message;
        this.code = code;
    }


    public CustomException( String message) {
        super(message);
        this.message = message;
    }


    @Override
    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }
}

统一异常处理类

@ControllerAdvice //只要是添加了@Controller的类,产生的异常都会在这边处理
@ResponseBody
public class GlobalExceptionHandler {

    /**
     * 处理自定义异常
     *
     * @param c
     * @return
     */
    @ExceptionHandler(value = CustomException.class)
    public Result customException(CustomException c) {
        c.printStackTrace();
        return Result.fail(c.getCode(), c.getMessage());
    }

    @ExceptionHandler(value = Exception.class)
    public Result error(Exception e) {
        e.printStackTrace();
        return Result.fail(e.getMessage());
    }
}

测试代码

    @GetMapping("/test/{phone}")
    public Result test(@PathVariable String phone) {
        if (!"123456789".equals(phone)) {
            throw new CustomException(ResponseStatusCode.PHONE_ERROR.getCode(), ResponseStatusCode.PHONE_ERROR.getMsg());
        }
        Map<String,String> map = new HashMap<>();
        map.put("data","hahah");
        return  Result.success(map); //正常返回状态码200
    }

Postman测试结果

在这里插入图片描述
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值