springboot封装响应实体的实例代码

 更新时间:2023年07月04日 15:09:49   作者:相与还  
这篇文章主要介绍了springboot封装响应实体,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

前言

首先什么是响应实体:

正常我们的后端都是接收前端,然后把请求需要的数据返回给前端,而这个返回的数据就是我们的响应实体

那么,为什么我们需要进行封装响应实体呢?

第一点,最明显的就是,为了人机友好交互,如果单单只是把返回的数据给到前端,有数据还好,但是没有数据的情况下,前端用户使用的时候查不到数据,怎么知道是因为什么原因没有数据呢?是因为确实查不到数据,还是因为业务逻辑卡控查不到数据,或者说代码逻辑报错

第二点的话,是为了保证类型安全性:使用泛型可以在编译时期提供类型检查,在运行时避免类型错误。通过泛型封装响应体,可以确保返回的数据类型与期望的类型一致,减少由于类型不匹配而引发的错误。

第三点,API设计:使用泛型封装响应体可以提高API的友好性和一致性。通过统一的响应体封装,客户端可以更容易地理解和使用API,并且不需要对每个响应类型进行专门处理。在大部分的对外程序里,你如果要使用别人写的程序,调用对方的某个功能,都是看对方的API接口,看返回和请求的数据分别是什么

第四点,可复用性以及扩展性:使用泛型封装响应体可以将通用的逻辑和行为与具体的响应类型解耦,使其可以在不同的场景中复用。这种灵活性可以减少代码的重复编写,提高代码的可维护性和可扩展性。泛型封装响应体可以为不同类型的响应提供支持,而无需修改现有的代码。这种灵活性使得我们可以轻松添加新的响应类型,提供更多的选择和功能

泛型

在上面,我有反复提到泛型,那么什么是泛型?

在Java语言中,泛型是一种强类型机制,它允许在定义类、接口和方法时使用参数化类型。通过使用泛型,可以实现类型的参数化,在编译时进行类型检查,提高代码的安全性和可维护性。

说了这么多有一些空泛,那么这边给出具体的实例作为演示

这里编写了一个泛型

public class Box<T> {
    private T value;
    public Box(T value) {
        this.value = value;
    }
    public T getValue() {
        return value;
    }
    public void setValue(T value) {
        this.value = value;
    }
}

使用

public class GenericExample {
    public static void main(String[] args) {
        // 创建一个存储整数的Box对象
        Box<Integer> intBox = new Box<>(10);
        intBox.setValue(20); // 设置新的值
        int value = intBox.getValue(); // 取得值
        // 创建一个存储字符串的Box对象
        Box<String> stringBox = new Box<>("Hello");
        stringBox.setValue("World"); // 设置新的值
        String str = stringBox.getValue(); // 取得值
    }
}

在上述中,我们不管是使用Integer还是String类型去存储数据,都能够正常的执行因此,泛型表现在:可接收任意的类型的数据

基础封装响应实体

以下为响应实体的代码:

public class Response<T> {
	// 状态码
    private int statusCode;
    // 响应信息提示
    private String message;
    // 响应数据
    private T data;
    // 构造函数
    public Response(int statusCode, String message, T data) {
        this.statusCode = statusCode;
        this.message = message;
        this.data = data;
    }
    // Getter和Setter方法
    // 状态码
    public int getStatusCode() {
        return statusCode;
    }
    public void setStatusCode(int statusCode) {
        this.statusCode = statusCode;
    }
    // 响应信息提示
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    // 响应数据
    public T getData() {
        return data;
    }
    public void setData(T data) {
        this.data = data;
    }
}

使用

public Response<String> Method1(String val) {
    // 执行逻辑,获取数据
    // 封装响应实体并返回
    return new Response<>(200, "成功", "响应数据");
}

根据你对封装的响应实体的重载方法,可编写不同的返回值

如:

return new Response<>("响应数据");
return new Response<>(200, "成功", "响应数据");
return new Response<>(200, "成功");

进阶封装响应

封装请求头和请求数据

如果你想封装为请求头和请求数据分离的形式,可编写代码如下:

public class Response<T> {
  public Header header;
  public T value;
  public Response() {
  }
  public Response(T value) {
    this.header = new Header();
    this.value = value;
  }
  public Response(int code, Exception ex) {
    if (ex.getMessage() == null) {
      this.header = new Header(code, ex.toString());
    } else {
      this.header = new Header(code, ex.getMessage());
    }
    this.value = null;
  }
  public Response(int code, String message) {
    this.header = new Header(code, message);
    this.value = null;
  }
  public Response(int code, T value, Exception ex) {
    if (ex.getMessage() == null) {
      this.header = new Header(code, ex.toString());
    } else {
      this.header = new Header(code, ex.getMessage());
    }
    this.value = value;
  }
  public Response(int code, T value, String message) {
    this.header = new Header(code, message);
    this.value = value;
  }
// 请求头,包含响应码和响应提醒信息
  public static class Header {
    public int code;
    public String message;
    public Header() {
      this.code = 0;
      this.message = "";
    }
    public Header(int code, String message) {
      this.code = code;
      this.message = message;
    }
  }
}

自定义响应码

有的时候,你不想使用默认的响应码对应的响应数据,需要根据自己的项目自定义响应码。可参考如下

定义枚举类

// 该注解需要添加lombok
@Getter
public enum ResultCode {
    SUCCESS(1000, "操作成功"),
    FAILED(1001, "响应失败"),
    VALIDATE_FAILED(1002, "参数校验失败"),
    NO_RESULT(1003, "未查询到相关信息"),
    MES_ERROR(1004, "未查询到相关信息"),
    ERROR(5000, "未知错误"),
    FILE_UPLOAD_ERROR(5001, "文件上传失败");
    private int code;
    private String msg;
    ResultCode(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }
}

响应体

@Getter
// 这两个注解可自动添加构造函数
@AllArgsConstructor
@NoArgsConstructor
public class Response<T> {
	// 响应码
    private int code;
    //	响应提示信息
    private String msg;
    // 响应数据
    private T data;
    public Response(T data) {
        this(ResultCode.SUCCESS, data);
    }
    public Response(Integer code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    public Response(ResultCode resultCode, T data) {
        this.code = resultCode.getCode();
        this.msg = resultCode.getMsg();
        this.data = data;
    }
}

使用

    public ResultVO Method1(){
        // 执行逻辑
        return new ResultVO(ResultCode.SUCCESS);
    }

使用对应的状态码,会返回封装的响应提示信息

结语

以上为springboot进行封装响应实体的代码

到此这篇关于springboot封装响应实体的实例代码的文章就介绍到这了,更多相关springboot封装响应内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈Java的String中的subString()方法

    浅谈Java的String中的subString()方法

    下面小编就为大家带来一篇浅谈Java的String中的subString()方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • Java实现的KNN算法示例

    Java实现的KNN算法示例

    这篇文章主要介绍了Java实现的KNN算法,结合实例形式分析了KNN算法的原理及Java定义与使用KNN算法流程、训练数据相关操作技巧,需要的朋友可以参考下
    2018-06-06
  • FastJSON的0day漏洞的解决

    FastJSON的0day漏洞的解决

    本文主要介绍了FastJSON的0day漏洞的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • mybatis批量更新与插入方式

    mybatis批量更新与插入方式

    这篇文章主要介绍了mybatis批量更新与插入方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Java 重入锁和读写锁的具体使用

    Java 重入锁和读写锁的具体使用

    这篇文章主要介绍了Java 重入锁和读写锁的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • java实现2048游戏源代码

    java实现2048游戏源代码

    这篇文章主要为大家详细介绍了java实现2048游戏源代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • Java接口中尽量避免使用数组

    Java接口中尽量避免使用数组

    这篇文章主要介绍了Java接口中尽量避免使用数组的建议,根据实际示例展示了接口中使用数组而造成的影响程序速度的现象,需要的朋友可以参考下
    2015-07-07
  • Java如何实现图片裁剪预览功能

    Java如何实现图片裁剪预览功能

    通常注册账户上传用户图像时需要进行预览,这篇文章就是教我们如何用 Java 实现图片裁剪预览功能,需要的朋友可以参考下
    2015-07-07
  • java连接HBase,连接不上报错can not resolve问题及解决

    java连接HBase,连接不上报错can not resolve问题及解决

    这篇文章主要介绍了java连接HBase,连接不上报错can not resolve问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • JDBC建立数据库连接的代码

    JDBC建立数据库连接的代码

    这篇文章主要为大家详细介绍了JDBC建立数据库连接的代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11

最新评论