首页 > 其他分享 >Spring Boot项目——统一异常处理

Spring Boot项目——统一异常处理

时间:2022-09-07 18:56:58浏览次数:101  
标签:String Spring Boot request getMessage requestUrlBuffer requestUrl 异常 method

背景

  • 在做项目时,会产生各种各样业务异常,大致可以分为下面几类
    • 参数异常:服务端接收客户端参数时,参数不符合规则而产生的问题
    • 数据库异常:服务端和数据库交互时发生的异常
    • 业务异常:系统业务产生的问题
    • 未知异常:不属于以上三种异常的情况

解决思路

  • 对这些项目异常进行分类编码,服务端需要将这些异常信息返回给客户端。
  • 建立全局异常处理类,在类中针对不同类型异常进行返回值处理,包括默认返回结果。
  • 在业务中,不同未知抛出不同异常

关键代码

  • 全局异常处理
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
    
    /**
    *业务异常
    */
    @ExceptionHandler(BusinessException.class)
    public RetResult businessExceptionHandler(HttpServletRequest request, BusinessException e){
        if(Objects.nonNull(request)){
            StringBuffer requestUrlBuffer = request.getRequestURL();
            String method = request.getMethod();
            String requestUrl = Objects.isNull(requestUrlBuffer) ? request.getRequestURI() : requestUrlBuffer.toString();
            log.info("BusinessException:{}, \n请求URL: [{}], \n请求方式: [{}]\n", e.getMessage(), requestUrl, method, e);
        }
        return ResultUtil.error(e.getCode(), e.getMessage());
    }
    
    /**
    *参数异常
    */
    @ExceptionHandler(ParamException.class)
    public RetResult paramExceptionHandler(HttpServletRequest request, ParamException e) {
        if (Objects.nonNull(request)) {
            StringBuffer requestUrlBuffer = request.getRequestURL();
            String method = request.getMethod();
            String requestUrl = Objects.isNull(requestUrlBuffer) ? request.getRequestURI() : requestUrlBuffer.toString();
            log.info("ParamException:{}, \n请求URL: [{}], \n请求方式: [{}]\n", e.getMessage(), requestUrl, method, e);
        }
        return ResultUtil.error(e.getCode(), e.getMessage());
    }
    
    /**
    *数据库异常
    */
    @ExceptionHandler(DataBaseException.class)
    public RetResult databseExceptionHandler(HttpServletRequest request, DataBaseException e) {
        if (Objects.nonNull(request)) {
            StringBuffer requestUrlBuffer = request.getRequestURL();
            String method = request.getMethod();
            String requestUrl = Objects.isNull(requestUrlBuffer) ? request.getRequestURI() : requestUrlBuffer.toString();
            log.info("DatabseExceptionHandler{}, \n请求URL: [{}], \n请求方式: [{}]\n", e.getMessage(), requestUrl, method, e);
        }
        return ResultUtil.error(e.getCode(), e.getMessage());
    }

    @ExceptionHandler(RuntimeException.class)
    public RetResult runtimeExceptionHandler(HttpServletRequest request, RuntimeException e){
        if(Objects.nonNull(request)){
            StringBuffer requestUrlBuffer = request.getRequestURL();
            String method = request.getMethod();
            String requestUrl = Objects.isNull(requestUrlBuffer) ? request.getRequestURI() : requestUrlBuffer.toString();
            log.error("RuntimeException:{}, \n请求URL: [{}], \n请求方式: [{}]\n", e.getMessage(), requestUrl, method, e);
        }
        return ResultUtil.error(EnumResultCode.UN_KNOW_ERROR.getCode(), e.getMessage());
    }

    @ExceptionHandler(Exception.class)
    public RetResult exceptionHandler(HttpServletRequest request, Exception e){
        if(Objects.nonNull(request)){
            StringBuffer requestUrlBuffer = request.getRequestURL();
            String method = request.getMethod();
            String requestUrl = Objects.isNull(requestUrlBuffer) ? request.getRequestURI() : requestUrlBuffer.toString();
            log.error("Exception:{}, \n请求URL: [{}], \n请求方式: [{}]\n", e.getMessage(), requestUrl, method, e);
        }
        return ResultUtil.error(EnumResultCode.SYSTEM_ERROR.getCode(), e.getMessage());
    }
}

代码下载

标签:String,Spring,Boot,request,getMessage,requestUrlBuffer,requestUrl,异常,method
From: https://www.cnblogs.com/zuiyue_jing/p/16592627.html

相关文章

  • springboot集成ehcache
    目录springboot集成ehcache1、增加依赖2、增加ehcache.xml3、增加配置3.1、bootstrap.propertiesxml3.2、启动类增加配置4、工具类操作5、使用springboot集成ehcacheps:......
  • bootstrap-treeview
    目录#文档#使用1.引用2.定义容器3.初始化4.效果图#自定义函数#文档https://www.npmjs.com/package/bootstrap-treeviewhttps://github.com/jonmiles/bootstrap-tree......
  • 理解 Spring IoC 容器
    控制反转与大家熟知的依赖注入同理,这是通过依赖注入对象的过程.创建Bean后,依赖的对象由控制反转容器通过构造参数工厂方法参数或者属性注入.创建过程相对于普通......
  • springboot通过注解Resource引用指定配置
    yaml配置文件中增加两个不同环境的配置:java配置文件,参考微信支付的代码:/***@author<ahref="https://github.com/binarywang">BinaryWang</a>*/@Slf4j@Config......
  • springboot的日志配置
    转载:https://blog.csdn.net/tz845195485/article/details/123361895#========================logging日志相关的配置=====================#日志级别trace<debug<inf......
  • SpringBoot解决BigDecimal传到前端后精度丢失问题
    1、局部处理(1)在相应字段上加@JsonFormat@JsonFormat(shape=JsonFormat.Shape.STRING)(2)在相应字段上加@JsonSerialize@JsonSerialize(using=ToStringSerializer.class......
  • Spring学习笔记(二)
    Spring配置文件引入外部属性引入数据库和Druid的依赖在配置文件中配置DataSource的bean 直接配置属性<beanid="dataSource"class="com.alibaba.druid.pool.DruidDa......
  • Mysql异常——com.alibaba.druid.sql.parser.ParserException
    今天写业务逻辑时候,写完发现控制台出现报错,但是程序可以正常运行。在控制台报错中发现是因为SQL模糊查询格式问题修改模糊查询写法后成功解决该报错......
  • spring-boot spring-cloud spring-cloud-alibaba版本对应
    https://spring.io/projects/spring-cloud#overview   https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E ......
  • 记一次线上系统登录异常
    1.背景正式环境系统突然登录不上,提示登录失败。该应用是部署在云上k8s2.排查#首先看了下用户的密码,发现正常,无变动。#然后查看Pod运行日志kubectllogs-ftest_pod......