Saul's blog Saul's blog
首页
后端
分布式
前端
更多
分类
标签
归档
友情链接
关于
GitHub (opens new window)

Saul.J.Wu

立身之本,不在高低。
首页
后端
分布式
前端
更多
分类
标签
归档
友情链接
关于
GitHub (opens new window)
  • 面试题

  • 博客搭建

  • 部署相关

  • 填坑

    • Mybatis-Plus
    • mysql安装后,没有默认密码
    • mybatis-plus逻辑删除
    • springboot 2.3.x 版本无法引用 javax.validation.constraints. 下的 @NotNull 注解
    • SpringBoot的全局异常处理类不生效
      • 前言
      • 原因
      • 解决
      • 总结
      • 参考链接
    • 谷粒商城下载的sql中,pms_attr,缺少value_type字段
    • IP address could not be resolved Name or service not known错误解决
    • 在linux服务器上安装jdk
    • yum安装maven
    • git提交多个远程仓库
    • SpringBoot多模块依赖yml不生效
    • Error launching IDEA
    • Linux查看端口占用并关闭程序
    • GitCommitId开发生产环境长度不一致
    • 记一次MySql UTF-8问题
  • Python

  • 其他

  • 收藏夹

  • 友情链接
  • 更多
  • 填坑
SaulJWu
2020-11-18

SpringBoot的全局异常处理类不生效

# 前言

今天我把Springboot多模块的全局统一异常处理抽出来,放到common模块。但是发现无论如何我的全局异常处理都没有生效。

如退所示,我的模块如下

image-20201118140407875

当我ware模块下的service方法中有一个抛出异常,但是却没有被common模块中的拦截器拦截到。

elitemall-common/src/main/java/com/elite/mall/common/exception

package com.elite.mall.common.exception;


import com.elite.mall.common.api.CommonResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 全局统一处理所有异常
 *
 * @author SaulJ
 */
@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {

    @ResponseBody
    @ExceptionHandler(value = ApiException.class)
    public CommonResult handle(ApiException e) {
        System.out.println("捕捉到了API异常……");
        if (e.getErrorCode() != null) {
            return CommonResult.failed(e.getErrorCode());
        }
        return CommonResult.failed(e.getMessage());
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

我在postman故意去发送错误的数据,让它抛出异常,发现并没有捕捉到,控制台也不打印这句话。

# 原因

经过我排查,因为Springboot没有扫描到另一个模块中的异常处理类,所以需要添加扫描范围。

# 解决

@SpringBootApplication(scanBasePackages = "com.elite.mall")
1

只需要在ware的Springboot启动类中加入扫描范围即可,因为我所有的包都是在这个com.elite.mall下面的。

image-20201118141651398

image-20201118141710880

image-20201118141746301

通过点击Springboot启动类左边的放大镜,现在可以扫描到了全局异常处理的拦截类。

image-20201118140702374

重启微服务,发现控制台也打印了,前台也按我要的方式返回了。

{
    "code": 500,
    "message": "只有被领取的采购单才能被完成",
    "data": null
}
1
2
3
4
5

# 总结

在多模块微服务里,如果类似全局统一处理的类,在common模块,而不是在本服务模块,一定要设置扫描包范围。所有的微服务模块,都在同一个的包下。

# 参考链接

SpringBoot中处理校验逻辑的两种方式,真的很机智! (opens new window)

Spring Boot多模块项目中,解决全局异常捕获不生效的问题_LLittleF的博客-CSDN博客 (opens new window)

mall/MallPortalApplication.java at master · macrozheng/mall (opens new window)

帮我改善此页面 (opens new window)
#SpringBoot#ControllerAdvice#扫描#全局统一#微服务#异常处理
上次更新: 2021/02/16, 12:29:08
springboot 2.3.x 版本无法引用 javax.validation.constraints. 下的 @NotNull 注解
谷粒商城下载的sql中,pms_attr,缺少value_type字段

← springboot 2.3.x 版本无法引用 javax.validation.constraints. 下的 @NotNull 注解 谷粒商城下载的sql中,pms_attr,缺少value_type字段→

最近更新
01
zabbix学习笔记二
02-28
02
zabbix学习笔记一
02-10
03
Linux访问不了github
12-08
更多文章>
Theme by Vdoing | Copyright © 2020-2022 Saul.J.Wu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式