Springboot自定义全局异常问题

 更新时间:2024年05月17日 15:01:23   作者:纳兰雨天  
这篇文章主要介绍了Springboot自定义全局异常问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Springboot自定义全局异常

自定义全局异常

bizException基础包下封装异常类

  • BizException:运行时业务中出现的异常
/**
 * @Description : 运行时业务中出现的异常
 * @Param :
 * @Return :
 * @Author : l-jiahui
 * @Date : 2020-10-11
 */
public class BizException extends RuntimeException {

    private static final long serialVersionUID = -7864604160297181941L;

    private final String code;

    /**
     * @Description : 指定枚举类中的错误类
     * @Param : [errorCode]
     * @Return :
     * @Author : l-jiahui
     * @Date : 2020-10-11
     */
    public BizException(final BizExceptionCode exceptionCode) {
        super(exceptionCode.getMessage());
        this.code = exceptionCode.getCode();
    }
    /**
     * @Description : 指定具体业务错误的信息
     * @Param : [detailedMessage]
     * @Return :
     * @Author : l-jiahui
     * @Date : 2020-10-11
     */
    public BizException(final String message) {
        super(message);
        this.code = BizExceptionCodeEnum.SPECIFIED.getCode();
    }

    public String getCode() {
        return code;
    }
}
  • BizExceptionCode: 业务异常的错误代码接口
/**
 * @Description : 业务异常的错误代码接口
 * @Param :
 * @Return :
 * @Author : l-jiahui
 * @Date : 2020-10-11
 */

public interface BizExceptionCode {

    /**
     * @Description : 获取错误代码
     * @Param : []
     * @Return : java.lang.String
     * @Author : l-jiahui
     * @Date : 2020-10-11
     */
    String getCode();
    
    /**
     * @Description : 获取错误信息
     * @Param : []
     * @Return : java.lang.String
     * @Author : l-jiahui
     * @Date : 2020-10-11
     */
    String getMessage();

}
  • BizExceptionCodeEnum:异常消息的枚举类(此类属于业务异常枚举类)
/**
 * @Description : 异常消息的枚举类(此类属于业务异常枚举类)
 * @Param :
 * @Return :
 * @Author : l-jiahui
 * @Date : 2020-10-11
 */
public enum BizExceptionCodeEnum implements BizExceptionCode{

    // 已指明的异常,在异常使用时message并不返回前端,返回前端的为throw新的异常时指定的message
    SPECIFIED("-1","系统发生异常,请稍后重试"),

    // 常用业务异常
    USER_NAME_NULL("-1","用户名不能为空,请重新输入!"),
    USER_PASSWORD_NULL("-1","密码不能为空,请重新输入!"),
    USER_PASSWORD_WRONG("-1","密码错误,请检查后重新输入!"),
    PAGE_NUM_NULL("4001","页码不能为空"),
    PAGE_SIZE_NULL("4002","页数不能为空"),
    SEARCH_NULL("4004","搜索条件不能为空,请检查后重新输入!"),
    NO_LOGIN("3001", "用户未进行登录")
    ;

    private final String code;

    private final String message;

    /**
     * @Description :
     * @Param : [code, message]
     * @Return :
     * @Author : l-jiahui
     * @Date : 2020-10-11
     */
     BizExceptionCodeEnum(String code,String message){

        this.code = code;
        this.message = message;
    }

    @Override
    public String getCode() {
        return code;
    }

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

全局捕获异常和自定义全局捕获异常以及404处理

/**
 * @author l-jiahui
 * extend of {@link ResponseEntityExceptionHandler} for handle all exception
 * @Description: 全局捕获异常和自定义全局捕获异常
 */
@ControllerAdvice
public class GlobalControllerAdvice {

    /**
     * 拦截捕捉自定义异常 BizException.class
     *
     * @param bizException 自定义异常
     * @return map
     */
    @ResponseBody
    @ExceptionHandler(value = BizException.class)
    public Map<String, Object> myExceptionHandler(BizException bizException, HttpServletResponse response) {
        Map<String, Object> map = new HashMap<>(16);
        map.put("code", bizException.getCode());
        map.put("msg", bizException.getMessage());
        response.setStatus(Integer.parseInt(bizException.getCode()));
        return map;
    }

    /**
     * 增加处理404的统一错误信息
     *
     * @param response response对象
     * @return 返回map对应的对象信息
     */
    @ExceptionHandler(value = {NoHandlerFoundException.class})
    @ResponseStatus(HttpStatus.NOT_FOUND)
    @ResponseBody
    public Map<String, Object> notFoundException(HttpServletResponse response) {
        Map<String, Object> map = new HashMap<>(16);
        map.put("code", "404");
        map.put("msg", "not found exception");
        response.setStatus(404);
        return map;
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot+Idea热部署实现流程解析

    SpringBoot+Idea热部署实现流程解析

    这篇文章主要介绍了SpringBoot+Idea热部署实现流程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Java设计模式常用的七大原则总结

    Java设计模式常用的七大原则总结

    今天给大家总结了Java设计模式的七大原则,主要有单一职责原则,接口隔离原则,依赖倒转原则,里氏替换原则等,文中有非常详细的介绍,需要的朋友可以参考下
    2021-06-06
  • 详解Spring Boot最新版优雅停机的方法

    详解Spring Boot最新版优雅停机的方法

    这篇文章主要介绍了Spring Boot最新版优雅停机的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • 详解Java中的OkHttp JSONP爬虫

    详解Java中的OkHttp JSONP爬虫

    一般在java平台上,我们会使用apache httpclient作为http客户端,用于发送 http 请求,并对响应进行处理,这篇文章主要介绍了详解Java中的OkHttp JSONP爬虫的相关资料,需要的朋友可以参考下
    2022-07-07
  • SpringMVC实现返回响应的项目实践

    SpringMVC实现返回响应的项目实践

    本文主要介绍了SpringMVC实现返回响应的项目实践,包含返回静态页面,返回数据,返回html片段等实例,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • SpringBoot中定时任务@Scheduled的多线程使用详解

    SpringBoot中定时任务@Scheduled的多线程使用详解

    这篇文章主要为大家详细介绍了pring Boot定时任务@Scheduled的多线程原理以及如何加入线程池来处理定时任务,感兴趣的可以了解一下
    2023-04-04
  • 使用Mybatis Plus整合多数据源和读写分离的详细过程

    使用Mybatis Plus整合多数据源和读写分离的详细过程

    这篇文章主要介绍了Mybatis Plus整合多数据源和读写分离的详细过程,mybatisplus可以整合阿里的分布式事务组件seata,本文通过示例代码给大家介绍的非常详细,需要的朋友参考下吧
    2021-09-09
  • 解决idea每次新建项目都需要重新指定maven目录

    解决idea每次新建项目都需要重新指定maven目录

    这篇文章主要介绍了解决idea每次新建项目都需要配置maven,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 最新springboot解决跨域的几种方式小结

    最新springboot解决跨域的几种方式小结

    跨域指的是浏览器不能执⾏其他⽹站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制,这篇文章主要介绍了springboot解决跨域的几种方式,需要的朋友可以参考下
    2022-05-05
  • SpringMVC的Body参数拦截的问题

    SpringMVC的Body参数拦截的问题

    SpringMVC对出参和入参有非常友好的拓展支持,方便你对数据的输入和输出有更大的执行权,我们如何通过SpringMVC定义的结果做一系列处理呢,需要的朋友可以参考下
    2018-06-06

最新评论