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

springBoot统一响应类型3.3版本

前言:

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

上期回顾:

1:@ControllerAdvice提供了对全局统一响应支持

2:supports与beforBodyWrite关系,用一个三元运算符表示,supports ? beforBodyWrite :异常

3:supports只影响同一文件下的beforeBodyWrite

本期将进入到全局异常中

先创建一个类,我称其为异常统一类

第一点的:HTTP 状态码 | 菜鸟教程

第二点的:异常信息

继承RuntimeException,自动捕获运行时的异常

@Data
@AllArgsConstructor
public class BusinessException extends RuntimeException {


    /**
     * 异常编码
     * 异常信息
     */
    private int code;
    private String massage;

    /**
     * 无参构造函数
     */
    public BusinessException() {
        super();
    }
}

随着实践的加深

作者 对统一响应进行了更具体的细分

统一响应:成功响应和异常响应

根据它们传入的参数,又可以具体分为三种:

        第一种:基本响应        

        第二种:自定义信息响应

        第三种:完全自定义响应

对应形参

第一种:data

第二种:message、data

第三种:code、message、data

有些b人就是喜欢搞一些多余编码code,美名其曰专业化,之前的版本只有自定义消息,没做自定义编码,所以不适用了

public class apiResultYOUYA {

    /**
     * 默认成功HTTP状态码 (200 OK)
     */
    private static final int OK = HttpStatus.OK.value();

    /**
     * 默认错误HTTP状态码 (500 Internal Server Error)
     */
    private static int NO = HttpStatus.INTERNAL_SERVER_ERROR.value();

    /**
     *  基本响应
     *
     * @param data 响应数据
     * @param <T> 响应数据类型
     * @return
     */
    public static <T> apiResult<T> success(T data) {
        return new apiResult<>(OK, "操作成功", data);
    }

    /**
     *  自定义信息统一响应
     * @param message 自定义提示信息
     * @param data 响应数据
     * @return
     * @param <T> 响应数据类型
     */
    public static <T> apiResult<T> success(String message, T data) {
        return new apiResult<>(OK, message, data);
    }

    /**
     *  完全自定义统一响应
     * @param code  自定义提示编码
     * @param message 自定义提示信息
     * @param data  响应数据
     * @return
     * @param <T>   响应数据类型
     */
    public static <T> apiResult<T> success(int code, String message, T data) {
        return new apiResult<>(code, message, data);
    }

    /**
     *  基本失败响应
     * @return
     * @param <T> 响应数据类型
     */
    public static <T> apiResult<T> error() {
        return new apiResult<>(NO, "系统错误,请联系管理员");
    }

    /**
     *  自定义信息统一失败响应
     * @param message 自定义提示信息
     * @return
     * @param <T> 响应数据类型
     */
    public static <T> apiResult<T> error(String message) {
        return new apiResult<>(NO, message);
    }

    /**
     *  完全自定义统一失败响应
     * @param code  自定义编码
     * @param message 自定义提示信息
     * @return
     * @param <T> 响应数据类型
     */
    public static <T> apiResult<T> error(int code, String message) {
        return new apiResult<>(code, message);
    }

}

统一异常类处理

@Slf4j
@RestControllerAdvice
public class GlobalExcResult {

    @ExceptionHandler(Throwable.class)
    public apiResult handleException(Throwable throwable){

        if (throwable instanceof BusinessException businessException){
            log.info("请求出现业务异常:",throwable);
            return apiResultYOUYA.error(businessException.getMessage());
        }
        log.error("请求出现系统异常:",throwable);
        return apiResultYOUYA.error("服务器内部错误");
    }
}

运行

控制台打印报错是因为这两句

log.error("请求出现系统异常:",throwable);

log.info("请求出现业务异常:",throwable);

这响应内容是包含在data里的,重复了

在统一响应中打上断点,查看body

        if (body instanceof apiResult){
            return (apiResult)body;
        }

将它们转换成apiresult

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

相关文章:

  • 4、网工软考—VLAN配置—hybird配置
  • 以科技赋能,炫我云渲染受邀参加中关村文化科技融合影视精品创作研讨会!
  • 《白帽子讲 Web 安全》之跨站请求伪造
  • 剑指Offer44 -- 思维
  • Java Synchronized底层原理:Monitor机制、锁膨胀、自旋优化与偏向锁细节解密
  • vcpkg安装指定版本的库
  • 重磅推出稳联技术Profinet转CANopen网关智能工厂解决方案!
  • 磷酸铁锂电池自动分选机:新能源产业的智能新宠
  • 深入理解机器学习之TF-IDF:文本特征提取的核心技术
  • STM32 时钟树配置(debug)
  • Citus源码(1)分布式表行为测试
  • 自动化测试与 CAPTCHA 识别指南
  • notepad++ 正则表达式
  • Python第六章16:字典(dict)的常用操作
  • 如何为 Debian 和 Kali 系统更换软件源并更新系统
  • transform 3d学习简单示例
  • Mysql-DML
  • 基于dify平台批量分析excel格式信息
  • Android 12系统源码_系统启动(三)SystemServer进程
  • 启山智软实现b2c单商户商城对比传统单商户的优势在哪里?
  • C++ 中将函数作为参数传递
  • 推荐系统(十六):基于ESMM的商品召回/推荐系统
  • Burp Suite抓包实战:SQL注入漏洞挖掘
  • 18491 岛屿的数量
  • nn.BCELoss 介绍
  • 基于 Qt / HTTP/JSON 的智能天气预报系统测试报告
  • HCIA【NAT】
  • 机器学习和深度学习的关系
  • Cent OS7+Docker+Dify
  • 网络通信协议浅析:TCP/IP、UDP、HTTP 和 MQTT