当前位置: 首页 > news >正文

springBoot统一响应类型3.5.2版本

前言:

通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往复以至无穷,而实践和认识之每一循环的内容,都比较地进到了高一级的程度。

简单回顾:

第一阶段:统一响应的简单应用

第二阶段:统一响应的起源

第三阶段:统一响应实体的起源

第四阶段:统一响应实体的面向对象优化

分别对应的是

全局响应和异常响应的简单运用

前后端分离,为了提高开发效率而诞生的概念

基于后端响应的底层逻辑运用

为减少代码重复,提高代码可读写而诞生的工具类

正片:第五阶段:全局异常统一响应

第一步:封装一个专门用于异常的实体类

@Data
@AllArgsConstructor
public class BusinessException extends RuntimeException{

    /**
     *  异常状态码
     */
    private int code;
    /**
     *  异常信息
     */
    private String message;
    /**
     * 无参构造函数
     */
    public BusinessException(){
    }
}

继承RuntimeException完成异常实体的构建

第二步:实现全局异常

@Slf4j
/**
 * 专门用于构建Result Api服务时的全局异常处理。
 * 这个注解允许开发者在一个集中的地方处理所有控制器层抛出的异常,
 * 并且能够统一错误响应格式,从而提高系统的健壮性和用户体验。
 */
@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Throwable.class)
    public ApiResult handleException(Throwable e){
        log.info("系统异常:" + e);
        return ApiResultUnit.error(500,"系统问题,请联系管理员");
    }
}

基础版全局异常

只有系统问题是不行滴

@Slf4j
/**
 * 专门用于构建Result Api服务时的全局异常处理。
 * 这个注解允许开发者在一个集中的地方处理所有控制器层抛出的异常,
 * 并且能够统一错误响应格式,从而提高系统的健壮性和用户体验。
 */
@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Throwable.class)
    public ApiResult handleException(Throwable e){

        /**
         *  当异常是自定义报错时
         */
        if (e instanceof BusinessException){
            BusinessException businessException = new BusinessException();
            log.info("请求出现业务异常:", e);
            /**
             * 返回异常状态码、异常信息
             */
            return ApiResultUnit.error(businessException.getCode(), businessException.getMessage());
        }
        log.info("系统异常:",e);
        return ApiResultUnit.error(500,"系统问题,请联系管理员");
    }
}

问题又来了,我们没有自定义业务异常,所以无效

用一大段代码减少重复性的判断

    @GetMapping("/findById")
    public ApiResult<UserEntity> findById(Long id) {
        UserEntity byId = userService.findById(id);
        if (byId != null) {
            return new ApiResult<>(200, "操作成功", byId);
        }
        return new ApiResult<>(430,"未查询用户",null);
    }

http://www.dtcms.com/a/106819.html

相关文章:

  • 【橘子大模型】关于PromptTemplate
  • 定制化管理系统与通用管理系统,谁更胜一筹?
  • MySQL的进阶语法7(索引-B+Tree 、Hash、聚集索引 、二级索引(回表查询)、索引的使用及设计原则
  • ES6对函数参数的新设计
  • 贪心算法,其优缺点是什么?
  • 第二篇:系统分析师——1-6章
  • 深入解析 Spring Boot 测试核心注解
  • 使用UDP建立连接,会存在什么问题?
  • es使用ik分词器并自定义中文词库实现热更新
  • 软件工程13 条法则
  • 空调开机启动后发出噼里啪啦的异响分析与解决
  • C语言--字符串逆序
  • Timer的底层实现原理?
  • LETTERS(DFS)
  • Java 递归全解析:从原理到优化的实战指南
  • Elasticsearch 正排索引
  • 内网环境将nginx的http改完https访问
  • Sentinel-自定义资源实现流控和异常处理
  • Spring事务的传播机制
  • 二叉树的ACM板子(自用)
  • 网管平台核心功能解析(七)——IP管理
  • 【Neo4j介绍】
  • web网页上实现录音功能(vue3)
  • 大模型加速器2.0:构建智能知识库,助力大模型减少“幻觉”
  • 【dp + 裴蜀定理】P8646 [蓝桥杯 2017 省 AB] 包子凑数 题解
  • ubuntu中使用安卓模拟器
  • DeepBI如何深入了解竞品的广告策略和运营动机
  • 电子竞技战队网站设计与实现(ssm+jsp+mysql)含万字详细文档
  • einsum函数
  • 技术回顾day3