首页 > 其他分享 >如何为spring配置全局抛出异常注解

如何为spring配置全局抛出异常注解

时间:2024-06-23 22:54:48浏览次数:27  
标签:java xuecheng spring content 模块 抛出 注解 异常 public

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,因此可以被扫描到

标签:java,xuecheng,spring,content,模块,抛出,注解,异常,public
From: https://www.cnblogs.com/kun1790051360/p/18264056

相关文章

  • springmvc的视图
    目录6、springmvc的视图6.1、ThymeleafView6.2、转发视图6.3、重定向视图6.4、视图控制器view-contronller6、springmvc的视图SpringMVC中的视图是View接口,视图的作用渲染数据,将模型Model中的数据展示给用户,SpringMVC视图的种类很多,默认有转发视图和重定向视图当工程引入jstl的......
  • springboot+vue+mybatis流浪宠物领养管理系统+PPT+论文+讲解+售后
    互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对宠物领养信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力等问题,采用宠物领养系统可以有效管理,使信息管理能够......
  • 基于java ssm springboot摄影跟拍预定管理系统vue毕业设计项目实战分享
    前言......
  • 基于java ssm springboot社区团商品购系统vue毕业设计项目实战分享
    前言......
  • Spring Batch
    项目是做历史表的Migration锁定一定数量的历史表A,B,C,每张历史表在配置表里有一张记录,包括需要distinct的关键字段,包括分区大小,core大小(逻辑分区)以及一个参数(select_clause,历史表的条件比如时间)举例子,数据库配置表里 历史表A 的distinct字段country_code到60w条数据,分......
  • 基于SpringBoot+Vue农产品管理与销售APP设计和实现(源码+LW+调试文档+讲解等)
    ......
  • SpringCloud学习Day4
    熔断与限流:Sentinel1.概念Sentinel是面向分布式、多语言异构化服务架构的流量治理组件2.基本使用1.在应用中导入相关jar包,即在pom.xml添加以下依赖<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-core</artifactId><version>1.8.......
  • java使用@Controller注解跳转到thmyleaf页面时候报错
     报错如下######当我使用RestController时候接口可以得到返回的对象↓但是查看RestController和Controller的区别之后:也就是说@RestController返回的是一个对象,@Controller默认情况下,方法的返回值会被解析为一个视图名称,并寻找与该名称匹配的视图进行渲染。这意味着返回......
  • Java项目:springboot汉服文化bbs商城系统(计算机毕业设计)
    作者主页:Java毕设网 简介:Java领域优质创作者、Java项目、学习资料、技术互助文末获取源码一、项目介绍汉服文化bbs商城系统,主要分为前后台。共分两种角色:管理员与普通用户;管理员可登录前后台,普通用户仅可登录前台;普通用户登录后可发布、修改、删除自己的文章;前台主要......
  • 后端开发Spring框架之消息 消息队列案例--订单短信通知
    消息队列案例首先我们书写一个业务层接口定义的是发送消息短信消息处理packagecom.bigdata1421.message.service;publicinterfaceOrderService{voidorder(Stringid);}创建业务层的实现类并且我们要重写方法这里就是打印日志将消息打印在控制台再写......