ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringBoot优雅的全局异常处理

2021-07-20 08:31:48  阅读:176  来源: 互联网

标签:lombok SpringBoot 优雅 ex msg import 全局 异常 public


代码编写

SpringBoot的项目已经对有一定的异常处理了,但是对于我们开发者而言可能就不太合适了,因此我们需要对这些异常进行统一的捕获并处理。SpringBoot中有一个ControllerAdvice的注解,使用该注解表示开启了全局异常的捕获,我们只需在自定义一个方法使用ExceptionHandler注解然后定义捕获异常的类型即可对这些捕获的异常进行统一的处理。

我们根据下面的这个示例来看该注解是如何使用吧。

示例代码:

import com.nuorui.common.domain.api.R;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * 全局异常处理类
 *
 * @author: Fred
 * @email 453086@qq.com
 * @create: 2021-07-16 11:07
 */
@RestControllerAdvice
public class ExceptionsHandler {

    /**
     * 业务异常
     *
     * @param ex
     * @return
     */
    @ExceptionHandler(BizException.class)
    public R bizExceptionHandler(BizException ex) {
        return R.failed(ex.msg);
    }

    /**
     * 参数转换异常拦截
     * @param ex
     * @return
     */
    @ExceptionHandler(HttpMessageNotReadableException.class)
    public R exceptionHandler(HttpMessageNotReadableException ex) {
        return R.failed("参数格式异常!");
    }


}

自定义异常类

然后我们在来自定义一个异常类,用于处理我们发生的业务异常。

示例代码:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Setter;
import lombok.experimental.Accessors;

/**
 * 业务异常处理类
 *
 * @author: Fred
 * @email 453086@qq.com
 * @create: 2021-07-16 11:07
 */
@Data
@AllArgsConstructor
@Accessors(chain = true)
public class BizException extends RuntimeException {

    @Setter
    protected int code;

    @Setter
    protected String msg;

    public BizException(String msg){
        this.msg = msg;
    }

}

 

标签:lombok,SpringBoot,优雅,ex,msg,import,全局,异常,public
来源: https://www.cnblogs.com/fangts/p/15033114.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有