SpringBoot统一结果集封装

简介: 统一的返回格式更加有利于接口的返回与扩展,值得推荐!
我们都知道在进行前后端分离项目开发时,后端服务器不再负责页面的跳转,而是返回给前台一个封装了结果集的json串,前台接收到后台返回的信息后负责页面的转发跳转以及页面的数据渲染。

一、为什么结果集要统一封装

我们都知道,在开发前后端分离项目的时候,前后台交互的流程大概是前台页面访问后台接口,后台处理完前台的请求后将处理结果返回给前台,由前台去进行页面的渲染。那么,后台返回给前台的结果信息肯定是由后台提前设置好的结果信息,就拿下面这段封装结果集的信息来看,每次返回结果信息都需要 new 一个结果集对象,如果每次都new一个对象,会加大系统开销,损耗系统性能,为了一个返回结果而去这样加大系统开销实在是不值得推荐,那应该怎样呢?想必大家也都见过,那就是把返回结果集封装成一个工具类,每次就不需要频繁的new对象了,这样会一定程度上减少系统开销。

@GetMapping("login")
public void loginResult() {
    Result result = new Result();
    result.setCode(200);
    result.setMsg("登录成功");
    result.setData("user",user);
}
@GetMapping("logout")
public void logoutResult() {
    Result result = new Result();
    result.setCode(200);
    result.setMsg("注销成功");
    result.setData(null);
}

二、如何封装结果集

1.定义一个用于封装返回结果集的对象;

public class Result<T> {
    /**
     * 状态码
     */
    public int code;
    /**
     * 提示信息
     */
    private String msg;
    /**
     * 返回的数据
     */
    private T data;
    
    public Result<T> setCode(RetCode retCode) {
        this.code = retCode.code;
        return this;
    }
    public int getCode() {
        return code;
    }
    public Result<T> setCode(int code) {
        this.code = code;
        return this;
    }
    public String getMsg() {
        return msg;
    }
    public Result<T> setMsg(String msg) {
        this.msg = msg;
        return this;
    }
    public T getData() {
        return data;
    }
    public Result<T> setData(T data) {
        this.data = data;
        return this;
    }
}

2.定义一个状态码枚举,用以状态码的返回;

public enum RetCode {
    //请求成功
    SUCCESS(200),

    //请求失败
    FAIL(400),

    //未认证(签名错误)
    UNAUTHORIZED(401),

    //资源拒绝访问
    FORBIDDEN(403),

    //接口不存在
    NOT_FOUND(404),

    //服务器内部错误
    INTERNAL_SERVER_ERROR(500);

    public int code;

    RetCode(int code) {
        this.code = code;
    }

}

3.把方法封装成一个工具类,避免频繁的new对象。

public class ResponseUtils {

    private final static String SUCCESS = "操作成功";
    private final static String FAIL = "操作失败";

    public static <T> Result<T> makeSuccessResponse() {
        return new Result<T>().setCode(RetCode.SUCCESS).setMsg(SUCCESS);
    }

    public static <T> Result<T> makeSuccessResponse(T data) {
        return new Result<T>().setCode(RetCode.SUCCESS).setMsg(SUCCESS).setData(data);
    }

    public static <T> Result<T> makeSuccessResponse(String msg, T data) {
        return new Result<T>().setCode(RetCode.SUCCESS).setMsg(msg).setData(data);
    }

    public static <T> Result<T> makeErrorResponse() {
        return new Result<T>().setCode(RetCode.FAIL).setMsg(FAIL);
    }

    public static <T> Result<T> makeErrorResponse(String msg) {
        return new Result<T>().setCode(RetCode.FAIL).setMsg(msg);
    }
    public static <T> Result<T> makeErrorResponse(int code, String msg) {
        return new Result<T>().setCode(code).setMsg(msg);
    }

    public static <T> Result<T> makeResponse(int code, String msg) {
        return new Result<T>().setCode(code).setMsg(msg);
    }

    public static <T> Result<T> makeResponse(int code, String msg, T data) {
        return new Result<T>().setCode(code).setMsg(msg).setData(data);
    }
}

三、返回的结果集

{
  "code": 200,
  "data":
  {
    "id": 1,
    "username": "admin",
    "password": "2f6495613c5217c6c5f46439fc57cff2",
    "realname": "管理员"
  },
  "msg": "登录成功"
}

返回结果集封装成一个对象无疑是一个好的习惯,它既可以减少频繁的new一个结果集对象损耗系统开销,又可以使程序变得美观整洁,何乐而不为呢?

目录
相关文章
|
2月前
|
JSON Java 数据格式
Spring Boot返回Json数据及数据封装
在Spring Boot中,接口间及前后端的数据传输通常使用JSON格式。通过@RestController注解,可轻松实现Controller返回JSON数据。该注解是Spring Boot新增的组合注解,结合了@Controller和@ResponseBody的功能,默认将返回值转换为JSON格式。Spring Boot底层默认采用Jackson作为JSON解析框架,并通过spring-boot-starter-json依赖集成了相关库,包括jackson-databind、jackson-datatype-jdk8等常用模块,简化了开发者对依赖的手动管理。
372 3
|
6月前
|
JSON Java 数据格式
微服务——SpringBoot使用归纳——Spring Boot返回Json数据及数据封装——封装统一返回的数据结构
本文介绍了在Spring Boot中封装统一返回的数据结构的方法。通过定义一个泛型类`JsonResult&lt;T&gt;`,包含数据、状态码和提示信息三个属性,满足不同场景下的JSON返回需求。例如,无数据返回时可设置默认状态码&quot;0&quot;和消息&quot;操作成功!&quot;,有数据返回时也可自定义状态码和消息。同时,文章展示了如何在Controller中使用该结构,通过具体示例(如用户信息、列表和Map)说明其灵活性与便捷性。最后总结了Spring Boot中JSON数据返回的配置与实际项目中的应用技巧。
540 0
|
10月前
|
Java
springboot将list封装成csv文件
springboot将list封装成csv文件
185 4
|
11月前
|
Java API Spring
springBoot:注解&封装类&异常类&登录实现类 (八)
本文介绍了Spring Boot项目中的一些关键代码片段,包括使用`@PathVariable`绑定路径参数、创建封装类Result和异常处理类GlobalException、定义常量接口Constants、自定义异常ServiceException以及实现用户登录功能。通过这些代码,展示了如何构建RESTful API,处理请求参数,统一返回结果格式,以及全局异常处理等核心功能。
114 1
|
前端开发 小程序 Java
【规范】SpringBoot接口返回结果及异常统一处理,这样封装才优雅
本文详细介绍了如何在SpringBoot项目中统一处理接口返回结果及全局异常。首先,通过封装`ResponseResult`类,实现了接口返回结果的规范化,包括状态码、状态信息、返回信息和数据等字段,提供了多种成功和失败的返回方法。其次,利用`@RestControllerAdvice`和`@ExceptionHandler`注解配置全局异常处理,捕获并友好地处理各种异常信息。
5675 0
【规范】SpringBoot接口返回结果及异常统一处理,这样封装才优雅
|
JSON 前端开发 Java
SpringBoot3怎么做统一结果封装?
在Spring Boot应用中,统一结果封装有助于团队协作,确保一致的API响应格式,提升代码质量和维护性。主要优点包括:简化前端集成工作,减少后端重复编码,以及增强接口的可维护性。实现上,首先定义`Result`类来封装响应状态码、消息、数据及时间戳;其次,通过`ResultCode`枚举类标准化状态信息。示例代码展示了如何构建这些类,并通过一个简单的控制器方法演示了如何使用它们返回JSON格式的响应结果。
570 2
springboot封装RedisTemplate
springboot封装RedisTemplate
119 6
|
XML Java API
springboot基础及上传组件封装
springboot基础及上传组件封装
96 0
|
JSON Java fastjson
Spring Boot返回Json数据及数据封装
本文详细介绍了如何在Spring Boot项目中处理JSON数据的传输 Spring Boot默认使用Jackson作为JSON处理器,并通过`spring-boot-starter-web`依赖自动包含相关组件。文章还展示了如何配置Jackson处理null值,使其转换为空字符串。此外,文章比较了Jackson和FastJson的特点,并提供了FastJson的配置示例,展示了如何处理null值以适应不同应用场景。
|
运维 监控 Java
SpringBoot-ElasticJob封装快速上手使用(分布式定时器)
SpringBoot-ElasticJob封装快速上手使用(分布式定时器)