• 【spring】在spring cloud项目中使用@ControllerAdvice做自定义异常拦截,无效 解决原因


    之前在spring boot服务中使用@ControllerAdvice做自定义异常拦截,完全没有问题!!!

    GitHub源码地址:

    但是现在在spring cloud中使用@ControllerAdvice做自定义异常拦截,却一直没有效果!

    package com.swapping.springcloud.ms.core.exception;
    
    import com.swapping.springcloud.ms.core.response.UniVerResponse;
    import org.springframework.web.bind.annotation.*;
    
    /**
     * controller加强器
     *
     */
    @ControllerAdvice
    public class MyControllerAdvice {
    
        /**
         * 系统异常 拦截器
         * @param ex
         * @return
         */
        @ResponseBody
        @ExceptionHandler(value = Exception.class)
        public UniVerResponse<String> errorHandler(Exception ex) {
            ex.printStackTrace();
            return MyErrorResultBean.create(ex);
        }
    
        /**
         * 自定义异常  拦截器
         * @param ex
         * @return
         */
        @ResponseBody
        @ExceptionHandler(value = MyException.class)
        public MyErrorResultBean myErrorHandler(MyException ex) {
            ex.printStackTrace();
            return MyErrorResultBean.create(ex);
        }
    }
    View Code

    原因:

    是因为在spring cloud项目中,启动类在一个微服务中,而@ControllerAdvice拦截器 放在另外一个公共的服务中,

    而启动类的@SpringBootApplication注解在服务启动时,只能扫描到 启动类所在包以及所有子包下的@Bean,并不能扫描到另一个公共服务中的注解,从而没有把@ControllerAdvice拦截器注入到spring中。

    解决方法:

    在启动类的@SpringBootApplication注解中说明,扫描的范围将@ControllerAdvice拦截器所在类包含进去,就可以扫描到了!!

    例如:

    @SpringBootApplication(scanBasePackages = "com.swapping")
    @EnableDiscoveryClient
    public class SpringcloudMsMemberApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringcloudMsMemberApplication.class, args);
        }
    }
    View Code
  • 相关阅读:
    requirejs小记
    backbone入门
    简单的javascript/css slider滑动条
    又一个简单试用的javascript Slider插件
    Hdu3926 Hand in Hand
    今天OJ升级的学习内容总结
    非常实用的PHP代码片段
    第一次面试经历
    PHP Filesystem 函数
    MFC实现 MSN QQ 窗口抖动
  • 原文地址:https://www.cnblogs.com/sxdcgaq8080/p/9857379.html
Copyright © 2020-2023  润新知