如何为spring配置全局抛出异常注解
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配置全局抛出异常注解的更多相关文章
- Spring 配置定时器(注解+xml)方式—整理
一.注解方式 1. 在Spring的配置文件ApplicationContext.xml,首先添加命名空间 xmlns:task="http://www.springframework.or ...
- 脱离xml使用JavaConfig实现Spring配置
总结 情况一: 配置类中类名添加 @Configuration 注解,同时提供一个方法返回一个Bean实例,且这个方法添加注解 @Bean ,就可以由Spring管理此对象 如下所示: User.ja ...
- spring,mybatis事务管理配置与@Transactional注解使用[转]
spring,mybatis事务管理配置与@Transactional注解使用[转] spring,mybatis事务管理配置与@Transactional注解使用 概述事务管理对于企业应用来说是至关 ...
- Spring IOC之基于注解的容器配置
Spring配置中注解比XML更好吗?基于注解的配置的介绍提出的问题是否这种途径比XML更好.简单来说就是视情况而定. 长一点的答案是每一种方法都有自己的长处也不足,而且这个通常取决于开发者决定哪一种 ...
- Spring框架学习之注解配置与AOP思想
上篇我们介绍了Spring中有关高级依赖关系配置的内容,也可以调用任意方法的返回值作为属性注入的值,它解决了Spring配置文件的动态性不足的缺点.而本篇,我们将介绍Spring的又一大核心 ...
- spring配置redis注解缓存
前几天在spring整合Redis的时候使用了手动的方式,也就是可以手动的向redis添加缓存与清除缓存,参考:http://www.cnblogs.com/qlqwjy/p/8562703.html ...
- Spring Boot 全局异常配置
Spring Boot 全局异常配置,处理异常控制器需要和发生异常的方法在一个类中.使用 ControllerAdvice 注解 package com.li.controller; import o ...
- spring,mybatis事务管理配置与@Transactional注解使用
spring,mybatis事务管理配置与@Transactional注解使用[转] spring,mybatis事务管理配置与@Transactional注解使用 概述事务管理对于企业应用来说是 ...
- Spring 和 SpringMVC 常用注解和配置(@Autowired、@Resource、@Component、@Repository、@Service、@Controller的区别)
Spring 常用注解 总结内容 一.Spring部分 1.声明bean的注解 2.注入bean的注解 3.java配置类相关注解 4.切面(AOP)相关注解 5.事务注解 6.@Bean的属性支持 ...
- spring的配置模式与注解模式基础
“依赖注入”是spring的核心特征,在Web服务器(如Tomcat)加载时,它会根据Spring的配置文件中配置的bean或者是通过注解模式而扫描并装载的bean实例自动注入到Application ...
随机推荐
- LOTO示波器软件新增导览功能
新版本的大部分型号LOTO示波器的上位机软件我们改成了导航工具条方式.原来的方式是把所有功能都显示在不同的标签页中,这样的优点是非常快捷方便,基本上用鼠标一两次点击就能直达想要的功能设置.但是缺点是不 ...
- docker离线安装
1. yum安装 #源添加 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo ...
- c/c++复习 2.0 ProMax
main函数执行前后做了什么 初始化.data数据段,包括静态变量和全局变量 初始化.bss字段,包括int 0; bool false: 指针 NULL 设置栈指针.main函数的参数传递.全局对象 ...
- Java中对的创建与引用
对象与引用 Java语言中除了基本数据类型以外都属于引用类型 Java中的对象是通过引用对其操作的 class Car{ String name; String color; int price; } ...
- JavaSE数组
目录 数组 概念 如何创建数组 数组的访问与迭代 二维数组 定义: 数组的声明 数组创建(会自动进行初始换为0) 数组遍历 数组 概念 在Java中,数组是一种用于存储多个相同类型元素的数据结构. ...
- 蓝屏rtux64w10.sys
蓝屏rtux64w10.sys 环境: WIN10 + Realtek USB RTL8156B 2.5G网卡 表现: 局域网复制时,间隔性速度变为0,多次后,最终蓝屏. 解决方法: 更新驱动. 地 ...
- Vue学习:22.Vue组件库-Vant
Vue组件库是一系列预先构建好的.可复用的UI组件集合,它们设计用于加速Vue.js应用程序的开发过程.这些组件通常遵循一定的设计规范,提供统一的外观和交互体验,让开发者能够快速搭建用户界面. 组件库 ...
- 使用Vagrant创建CentOS虚拟机
使用Vagrant创建CentOS虚拟机 Vagrant是一款由HashiCorp公司提供的,用于快速构建虚拟机环境的软件.本节我们将使用Vagrant结合Oracle VM VirtualBox快速 ...
- 2. Elasticsearch 使用插件和kibana操作
引言 在上一篇文章中1. Elasticsearch 入门安装与部署 已经教了大家如何在linux系统中安装和启动Elasticsearch,本文就带大家一起学习如何操作 Elasticsearch. ...
- 快速上手Python编程
前言 .center { width: auto; display: table; margin-left: auto; margin-right: auto } 类型 原理 优点 缺点 编译型语言 ...