0.首先了解一个注解@ControllerAdvice,他是spring里的一个注解,用于定义全局逻辑异常、数据绑定、请求处理等逻辑,与@ExceptionHandler等注解使用。

ControllerAdvice本质上就是一个Component,他用于对controller实现aop,

这里我们就是配合exceptionHandler捕获并抛出异常给前端

1.先定义一个我们自己的异常类,继承运行时异常

@NoArgsConstructor
@AllArgsConstructor
@Getter
public class MyException extends RuntimeException{
private String errMessage;
}

2.定义一个与前端约定好的异常类

@Data
@AllArgsConstructor
public class RestErrorResponse implements Serializable {
private String errMessage; }

3.通过controllerAdvice进行全局配置,这里我们是自己写的异常就正常抛出即可,其他异常直接统一抛出未知错误(比如经典的遇到了1/0)

@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {
@ResponseBody
@ExceptionHandler(MyException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public RestErrorResponse customException(MyException myException){
log.error("系统异常{}",myException.getErrMessage(),myException);
// 解析异常
String errMessage = myException.getErrMessage();
return new RestErrorResponse(errMessage);
}
@ResponseBody
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public RestErrorResponse exception(Exception e){
log.error("系统异常{}",e.getMessage(),e);
return new RestErrorResponse(CommonError.UNKOWN_ERROR.getErrMessage());
}
}

拓展:关于扫描问题,这里我的配置是没有错的,但是一直不走这个路线,直接throw就没了。后面我发现其实是我的启动类放错了位置。

我的配置模块是位于xuecheng-plus-base/src/main/java/com/xuecheng/base/exception/GlobalExceptionHandler.java

而我的启动类是位于xuecheng-plus-content/xuecheng-plus-content-api/src/main/java/com/xuecheng/content/ContentApplication.java

很明显这时的启动类只能扫描到content及以内的,如果我需要扫描到配置,需要将启动类修改为

xuecheng-plus-content/xuecheng-plus-content-api/src/main/java/com/xuecheng/ContentApplication.java

或者在启动类中添加扫描

@SpringBootApplication(scanBasePackages = "com.xuecheng"

这里为什么不在一个模块内也会被扫描到?
其实关于学成在线这一块是比较绕的,我经过梳理发现:api模块是依赖model模块的,而model模块又依赖base模块。因此api模块也是依赖basebase模块。而大家的包都是com.xuecheng,因此可以被扫描到

如何为spring配置全局抛出异常注解的更多相关文章

  1. Spring 配置定时器(注解+xml)方式—整理

    一.注解方式 1. 在Spring的配置文件ApplicationContext.xml,首先添加命名空间 xmlns:task="http://www.springframework.or ...

  2. 脱离xml使用JavaConfig实现Spring配置

    总结 情况一: 配置类中类名添加 @Configuration 注解,同时提供一个方法返回一个Bean实例,且这个方法添加注解 @Bean ,就可以由Spring管理此对象 如下所示: User.ja ...

  3. spring,mybatis事务管理配置与@Transactional注解使用[转]

    spring,mybatis事务管理配置与@Transactional注解使用[转] spring,mybatis事务管理配置与@Transactional注解使用 概述事务管理对于企业应用来说是至关 ...

  4. Spring IOC之基于注解的容器配置

    Spring配置中注解比XML更好吗?基于注解的配置的介绍提出的问题是否这种途径比XML更好.简单来说就是视情况而定. 长一点的答案是每一种方法都有自己的长处也不足,而且这个通常取决于开发者决定哪一种 ...

  5. Spring框架学习之注解配置与AOP思想

         上篇我们介绍了Spring中有关高级依赖关系配置的内容,也可以调用任意方法的返回值作为属性注入的值,它解决了Spring配置文件的动态性不足的缺点.而本篇,我们将介绍Spring的又一大核心 ...

  6. spring配置redis注解缓存

    前几天在spring整合Redis的时候使用了手动的方式,也就是可以手动的向redis添加缓存与清除缓存,参考:http://www.cnblogs.com/qlqwjy/p/8562703.html ...

  7. Spring Boot 全局异常配置

    Spring Boot 全局异常配置,处理异常控制器需要和发生异常的方法在一个类中.使用 ControllerAdvice 注解 package com.li.controller; import o ...

  8. spring,mybatis事务管理配置与@Transactional注解使用

    spring,mybatis事务管理配置与@Transactional注解使用[转]   spring,mybatis事务管理配置与@Transactional注解使用 概述事务管理对于企业应用来说是 ...

  9. Spring 和 SpringMVC 常用注解和配置(@Autowired、@Resource、@Component、@Repository、@Service、@Controller的区别)

    Spring 常用注解 总结内容 一.Spring部分 1.声明bean的注解 2.注入bean的注解 3.java配置类相关注解 4.切面(AOP)相关注解 5.事务注解 6.@Bean的属性支持 ...

  10. spring的配置模式与注解模式基础

    “依赖注入”是spring的核心特征,在Web服务器(如Tomcat)加载时,它会根据Spring的配置文件中配置的bean或者是通过注解模式而扫描并装载的bean实例自动注入到Application ...

随机推荐

  1. 浅谈C#中取消令牌CancellationTokenSource

    基础操作 CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); cancellationTo ...

  2. zabbix第一天 zabbix安装,添加监控项

    1. zabbix 介绍 公司规模大,服务器众多,运维人员需要用到zabbix来监控整个服务器的运行状况,避免服务器故障后运维人员无法察觉. 清华zabbix源: https://mirrors.tu ...

  3. 使用sysdig查看容器里的系统调用

    目录 一.系统环境 二.前言 三.系统调用简介 四.Sysdig简介 五.使用sysdig查看容器里的系统调用 5.1 以二进制包的形式安装sysdig 5.2 使用sysdig查看容器里的系统调用 ...

  4. Maven工程报错org.codehaus.plexus.component.repository.exception.ComponentLookupException

    本人电脑环境:jdk1.8,idea2021,maven 3.6.3 问题:今天调整maven项目的三个配置参数后,idea报了下面的错误 org.codehaus.plexus.component. ...

  5. Canny边缘检测实现(Opencv C++)

    Canny边缘检测是Canny在1986年提出来的,目前仍是图像边缘检测算法中最经典.先进的算法之一.canny方法基于如下三个基本目标: 1. 低错误率:所有边缘都应被找到,并且不应有虚假响应. 2 ...

  6. MYSQL 移机重装步骤(windows11)

      MYSQL 移机重装步骤(windows11)   目的:已有电脑 A,D盘安装有mysql(安装方式为免安装) , 准备在另一台电脑B上,复制安装电脑A上的mysql(8.0.23版本) . 要 ...

  7. pandas基础--层次化索引

    pandas含有是数据分析工作变得更快更简单的高级数据结构和操作工具,是基于numpy构建的. 本章节的代码引入pandas约定为:import pandas as pd,另外import numpy ...

  8. 【Java面试题-基础知识03】Java线程连环问

    1.Java中的线程是什么? 在Java中,线程是程序执行流的最小单元.每个Java程序都至少有一个主线程,也称为主执行线程,它是程序开始执行时自动创建的.除了主线程外,程序员还可以创建额外的线程来执 ...

  9. kettle从入门到精通 第四十二课 kettle 1对多表拆分同步

    1.在有的业务场景中,会涉及一对多表拆分同步的业务场景,也就是说原表是一张表,将原表字段进行拆分放入目标库中的多张表,如下面的示例将表student_third中的数据 同步到student.teac ...

  10. INFINI Labs 产品更新 | Gateway 支持基于 Kafka 的复制能力,发布 Helm Charts 部署方式

    INFINI Labs 产品又更新啦~.本次更新概要如下:Easysearch 新增了索引字段相关统计 API,优化了 source_reuse 提升压缩效率:Gateway 新增诸多新特性,如:支持 ...