springBoot统一响应类型3.5.1版本

前言:

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

简单回顾

在那之前,完成了最简单的全局响应和全局异常响应

现在进入到挖深度的环节

简单了解了统一响应的起源------前后端分离,提高两者交流

简单了解了统一响应实体的来源------http响应机制,提炼出三个统一属性(状态码,信息,数据)

正片

java 复制代码
public class ApiResultUnit {

    /**
     * 禁止实例化,避免不必要的报错
     */
    private ApiResultUnit(){

    }

    /**
     * 请求成功------标准响应
     *
     * @param data 响应数据
     * @param <T> 响应类型
     * @return ApiResult实体
     */
    public static <T> ApiResult<T> success(T data){
        return new ApiResult<>(ApiResult.OK,"操作成功",data);
    }

    /**
     * 请求成功------自定义信息响应
     *
     * @param data 响应数据
     * @param message 响应信息
     * @param <T> 响应类型
     * @return ApiResult实体
     */
    public static <T> ApiResult<T> success(String message,T data){
        return new ApiResult<>(ApiResult.OK,message,data);
    }

    /**
     *请求成功------业务异常响应
     *
     * @param code 状态码
     * @param message 响应信息
     * @param <T> 响应类型
     * @return ApiResult实体
     */
    public static <T> ApiResult<T> error(int code,String message){
        return new ApiResult<>(code,message,null);
    }

}

作者这里进过实践,进行了优化

去掉了完全自定义成功响应,去掉了默认失败响应,当然这个默认失败响应正确的描述应该是系统异常,也就是http状态码里的500错误,我们在全局异常中和设置,所以就不在工具类这里设置了

为什么要用工具类呢?

给大伙看一个案例

java 复制代码
    @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);
    }

你第一眼,你能判断出哪个是成功吗?

啊对对对

我知道,操作成功

这样呢

我知道,看状态码,去你打野的,别看

为了更直观,更明了,区分成功和失败,减少代码的重复性

让你写一百个(200,"操作成功",null)也是很无味的

我们只要调用

复制代码
/**
 * 请求成功——标准响应
 *
 * @param data 响应数据
 * @param <T> 响应类型
 * @return ApiResult实体
 */
public static <T> ApiResult<T> success(T data){
    return new ApiResult<>(ApiResult.OK,"操作成功",data);
}

传入data即可

总结一下工具类的作用:减少代码重复,增加代码的可读性,你一看,success(成功),这就是成功,而不是通过状态码200,信息判断"操作成功"

相关推荐
爱尚你199314 分钟前
Java 泛型与类型擦除:为什么解析对象时能保留泛型信息?
java
全栈派森33 分钟前
云存储最佳实践
后端·python·程序人生·flask
电商数据girl37 分钟前
酒店旅游类数据采集API接口之携程数据获取地方美食品列表 获取地方美餐馆列表 景点评论
java·大数据·开发语言·python·json·旅游
CircleMouse38 分钟前
基于 RedisTemplate 的分页缓存设计
java·开发语言·后端·spring·缓存
ktkiko1144 分钟前
顶层架构 - 消息集群推送方案
java·开发语言·架构
zybsjn1 小时前
后端系统做国际化改造,生成多语言包
java·python·c#
Unity官方开发者社区1 小时前
《Cryptical Path》开发诀窍:像玩游戏一样开发一款类Rogue游戏
java·游戏·玩游戏
_星辰大海乀1 小时前
表的设计、聚合函数
java·数据结构·数据库·sql·mysql·数据库开发
IT成长史2 小时前
deepseek梳理java高级开发工程师微服务面试题-进阶版
java·spring cloud·微服务
zkmall2 小时前
Java + 鸿蒙双引擎:ZKmall开源商城如何定义下一代B2C商城技术标准?
java·开源·harmonyos