自学内容网 自学内容网

前后端交互:封装公共响应值给前端

在Java web开发中,后端与前端进行交互时,需要一种统一规范的方式来传递响应信息。前端往往需要根据后端返回的信息判断请求是否成功、获取相应的数据以及知晓可能出现的错误情况。为了实现这样统一且便携的交互模式,就需要对后端返回给前端的响应值进行合理的封装,以下代码中的 ResultWrapper 类就是用于达成这个目的,并且它还能作为 feign 调用时的公共响应格式。便于调用方统一解析,增强了整个系统在不同模块间交互的规范性和可维护性。

package resultWrapper;

import lombok.Data;

@Data
public class ResultWrapper<T> {
    private Boolean success = true;
    private Integer code;
    private T data;
    private String message;
    private ResultWrapper(){

    }

    public static <T> ResultWrapper<T> success(){
        return success(null);
    }
    public static <T> ResultWrapper<T> success(T data){
        return assemble(ResultCode.SUCCESS.getCode(), true,data);
    }
    public static <T> ResultWrapper<T> error(){
        return error(null);
    }
    public static <T> ResultWrapper<T> error(T data){
        return assemble(ResultCode.SYSTEM_FAILURE.getCode(), false,data);
    }
    
    public ResultWrapper<T> data(T data){
        this.setData(data);
        return this;
    }
    public ResultWrapper<T> message(String message){
        this.setMessage(message);
        return this;
    }
    public ResultWrapper<T> code(int code){
        this.setCode(code);
        return this;
    }

    public static <T> ResultWrapper<T> assemble(int code,boolean success,T data){
        ResultWrapper<T> resultWrapper = new ResultWrapper<>();
        resultWrapper.setCode(code);
        resultWrapper.setSuccess(success);
        resultWrapper.setData(data);
        return resultWrapper;
    }
}

        1.这是一个泛型类,类型参数T可以代表任意类的数据,用于存放接口实际要返回给前端的数据部分。例如,接口返回一个用户对象列表,T 就可以是 List<User> 类型;如果返回一个单个的订单对象,T 就可以是 Order 类型等;

        2.定义了四个私有成员变量:

                success:布尔类型,用于标识此次请求响应是否成功,初始值设为 true,表示默认成功                                状态;

                code:整数类型,用于存放表示响应状态的代码,不同的代码对应不同的相应情况,比                                如成功、各种错误等;

                data:泛型类型T,就是实际要传输给前端前端的业务数据;

                message:字符串类型,用于存放一些额外的提示信息,比如成功时的友好提示或者失                                败时的错误原因等;

        3.私有构造方法:

                外界不能直接通过 new 关键字来创建 ResulrWrapper 对象,这样可以更好的控制对象的创建过程,保证其创建符合规定的逻辑。

        4.静态方法用于创建成功/失败响应:

                success():无参数的 success 方法调用了带参数的 success 方法并传入 null,通常可以在不需要传递具体业务数据但又想表示操作成功的场景下使用;

                success(T data):接收一个泛型参数data,代表要返回给前端的实际业务逻辑,然后调用 assemble() ,传入表示成功的状态码、表示成功的布尔值 true 以及业务数据 data,最终返回给ResultWrapper 对象,表示一次成功的响应封装;

                error():无参数的 error方法调用带参数的 error方法并传入 null,适用于不需要传递特定失败相关数据但仅想表示出现系统层面错误的场景;

                error(T data):接收泛型参数 data,调用 assemble方法,传入表示系统失败的状态码、表示失败的布尔值 false以及业务数据 data,返回封装好的表示失败响应的 ResultWrapper对象;

        5.链式调用方法用于设置属性:

                这3个方法分别用于设置 ResultWrappe r对象的 data、message、code 属性,并且返回当前对象自身(return this),这样就可以实现链式调用。例如:

        ResultWrapper.success(data).message("访问成功");,可以在创建成功响应对象后接着设置消息属性,使代码书写更加简洁和连贯;

        6.核心组装方法assemble(int code,boolean success,T data):

                assemble 方法是一个静态方法,它接收状态码、成功标识以及业务数据三个参数,在方法内部创建一个 ResultWrapper 对象,然后依次设置传入的这些参数对应的属性值,最后返回组装好的 ResulrWrapper 对象,其他创建成功或失败响应的静态方法最终都是通过调用这个 assemble 方法来完成对象的构建。

package resultWrapper;

import lombok.Getter;
//结果状态码
@Getter
public enum ResultCode {
    SUCCESS(1000,"访问成功"),

    SYSTEM_FAILURE(1001,"系统异常"),
        ;
    private final int code;
    private final String description;

    ResultCode(int code, String description) {
        this.code = code;
        this.description = description;
    }
}

        1.这是一个枚举类,使用 @Getter 注解自动生成获取成员变量的方法(相当于为 code 和 description 变量生成对应的 get 方法);

        2.定义了两个枚举常量

                SUCCESS 和 SYSTEM_FAILURE ,每个枚举常量都对应着一组状态码和描述信息。比如:    SUCCESS 状态码为1000,描述是 “访问成功”;SYSTEM_FAILURE 状态码为1001,描述是 “系统异常”。 在  ResultWrapper 类中创建成功或失败响应时,就是通过获取这些枚举常量对应的状态码来设置响应的状态码属性,方便统一管理和使用不同的响应状态标识。

使用示例:

return ResultWrapper.success(data);
return ResultWrapper.success(data).message("访问成功");
return ResultWrapper.error().message("访问失败");

展示了几种常用的使用方式:

        第一种直接返回带有业务数据的成功响应封装对象;
        第二种在返回成功响应封装对象的基础上,通过链式调用设置了额外的提示消息;

        第三种返回一个表示失败的响应封装对象,并通过链式调用设置了对应的错误提示消息,向前端传达此次请求出现问题的相关信息;

        总的来说,这段代码通过 ResultWrapper类和 ResultCode枚举类构建了一套规范的、便于使用的后端给前端响应值的封装机制,提高了前后端交互的统一性和便捷性,也方便在微服务等场景下进行统一的响应解析处理。


原文地址:https://blog.csdn.net/weixin_63172268/article/details/144284828

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!