springboot自定义异常处理

2022-10-17 13:38:30

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


)

前言

学习保存代码用
自定义异常处理,在Controller中自定义发生的异常。


一、使用的注解

@ControllerAdvice
@ExceptionHandler
@ResponseBody

二、使用步骤

1.自定义基础异常类

/**
 * 自定义基础异常
 */publicclassBaseExceptionextendsRuntimeException{privatestaticfinallong serialVersionUID=1L;/**
     * 所属模块
     */privateStringmodule;/**
     * 错误码
     */privateString code;/**
     * 错误码对应的参数
     */privateObject[] args;/**
     * 错误消息
     */privateString defaultMessage;publicBaseException(Stringmodule,String code,Object[] args,String defaultMessage){this.module=module;this.code= code;this.args= args;this.defaultMessage= defaultMessage;}publicBaseException(Stringmodule,String code,Object[] args){this(module, code, args,null);}publicBaseException(Stringmodule,String defaultMessage){this(module,null,null, defaultMessage);}publicBaseException(String code,Object[] args){this(null, code, args,null);}publicBaseException(String defaultMessage){this(null,null,null, defaultMessage);}@OverridepublicStringgetMessage(){String message=null;if(!StringUtil.isEmpty(code)){
            message= code;}if(message==null){
            message= defaultMessage;}return message;}publicStringgetModule(){returnmodule;}publicStringgetCode(){return code;}publicObject[]getArgs(){return args;}publicStringgetDefaultMessage(){return defaultMessage;}}

各个模块继承基础异常模块(举例)

/**
 * 用户信息异常类
 */publicclassUserExceptionextendsBaseException{privatestaticfinallong serialVersionUID=1L;publicUserException(String code,Object[] args){super("user", code, args,null);}}

构建全局异常处理器

@ControllerAdvicepublicclassGlobalExceptionController{/**
     * 全局异常捕捉处理
     * @param e
     * @return
     */@ResponseBody@ExceptionHandler(value=Exception.class)publicMaperrorHandler(Exception e){System.out.println("用户异常调用测!");Map map=newHashMap();
        map.put("code",100);
        map.put("msg", e.getMessage());return map;}/**
     * 拦截捕捉自定义异常 用户删除异常
     * @param ex
     * @return
     */@ResponseBody@ExceptionHandler(value=UserDeleteException.class)publicAjaxResultUserDeleteException(UserDeleteException ex){returnAjaxResult.error(ex.getMessage());}/**
     * 拦截捕捉自定义异常 用户锁定异常
     * @param ex
     * @return
     */@ResponseBody@ExceptionHandler(value=UserBlockedException.class)publicAjaxResultUserBlockedException(UserBlockedException ex){System.out.println("用户锁定异常调用!");returnAjaxResult.error(ex.getMessage());}}

总结

错误类型的参数必须和@ExceptionHandler里的参数保持一致,否则会找不到解析器。返回图的话去掉@ResponseBody,返回类型设为ModelAndView

  • 作者:妖斩幻陌
  • 原文链接:https://blog.csdn.net/weixin_48670458/article/details/124075796
    更新时间:2022-10-17 13:38:30