1、前言

在实际项目开发中,为了便于前端进行响应处理,需要统一返回类格式。特别是在有多个后端开发人员参与的情况下,如果不规范返回类,每个人按照个人习惯返回数据,前端将面临各式各样的返回数据,难以统一处理。为解决这个问题,我们需要规范后端的返回数据,并定义一个统一的返回类,所有数据的返回都由该返回类进行处理。

创建返回类

package com.example.common.response;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor; /**
* 统一API对象返回
* @param <T>
* @Author: TanXJ
* @Date: 2021/10/13 9:31
*/
@Data
@NoArgsConstructor
public class ResultBean<T> {
/** 状态码 */
@ApiModelProperty(value = "状态码", example = "200")
private Integer code; /** 返回消息 */
@ApiModelProperty(value = "返回消息", example = "操作成功")
private String message; /** 状态 */
@ApiModelProperty(value = "状态", example = "true")
private boolean status; /** 返回数据 */
@ApiModelProperty(value = "返回数据", example = "")
private T data; public ResultBean(Integer code, String message, boolean status, T data) {
this.code = code;
this.message = message;
this.status = status;
this.data = data;
} public ResultBean(ResultCode resultCode, boolean status, T data) {
this.code = resultCode.getCode();
this.message = resultCode.getMessage();
this.status = status;
this.data = data;
} public ResultBean(ResultCode resultCode, boolean status) {
this.code = resultCode.getCode();
this.message = resultCode.getMessage();
this.status = status;
this.data = null;
} public static <T> ResultBean success() {
return new ResultBean<>(ResultCode.OK, true);
} public static <T> ResultBean message(String message) {
return new ResultBean<>(ResultCode.OK.getCode(), message, true, null);
} public static <T> ResultBean success(T data) {
return new ResultBean<>(ResultCode.OK, true, data);
} public static <T> ResultBean fail() {
return new ResultBean<>(ResultCode.ERROR, false);
} public static <T> ResultBean fail(ResultCode resultCode) {
return new ResultBean<>(resultCode, false);
} public static <T> ResultBean fail(Integer code, String message) {
return new ResultBean<>(code, message, false, null);
} public static <T> ResultBean fail(ResultCode resultCode, T data) {
return new ResultBean<>(resultCode, false, data);
} public static <T> ResultBean fail(Integer code, String message, T data) {
return new ResultBean<>(code, message, false, data);
} }

创建统一状态码接口

package com.example.common.response;

/**
* 统一状态码接口
*/
public interface IResultCode {
/**
* @return 状态码
*/
Integer getCode(); /**
* @return 返回消息
*/
String getMessage();
}

创建通用状态枚举

package com.example.common.response;

import lombok.Getter;

/**
* 通用状态枚举
*/
@Getter
public enum ResultCode implements IResultCode {
/**
* 成功
*/
OK(200, "成功"),
/**
* 失败
*/
ERROR(500, "失败"),
SYSTEM_ERROR(501, "系统错误"),
UNKNOWN_ERROR(502, "未知错误"), /* 参数错误:1000~1999 */
PARAM_NOT_VALID(1001, "参数无效"),
PARAM_IS_BLANK(1002, "参数为空"),
PARAM_TYPE_ERROR(1003, "参数类型错误"),
PARAM_NOT_COMPLETE(1004, "参数缺失"),
PARAM_TYPE_REPEAT(1005,"参数重复"), /* 用户错误 */
USER_NOT_LOGIN(2001, "用户未登录"),
USER_ACCOUNT_EXPIRED(2002, "账号已过期"),
USER_CREDENTIALS_ERROR(2003, "密码错误"),
USER_CREDENTIALS_EXPIRED(2004, "密码过期"),
USER_ACCOUNT_DISABLE(2005, "账号不可用"),
USER_ACCOUNT_LOCKED(2006, "账号被锁定"),
USER_ACCOUNT_NOT_EXIST(2007, "账号不存在"),
USER_ACCOUNT_NOT_NULL(2013, "账号不能为空"),
USER_CREDENTIALS_NOT_NULL(2014, "密码不能为空"),
USER_ACCOUNT_ALREADY_EXIST(2008, "账号已存在"),
USER_ACCOUNT_USE_BY_OTHERS(2009, "账号下线"), /* token错误 */
TOKEN_IS_NULL(2011, "token不能为空"),
TOKEN_INVALID(2012, "token失效"),
TOKEN_ERROR(2015, "token错误"), /* 业务错误 */
NO_PERMISSION(3001, "没有权限"),
ADD_FAIL(3002, "新增失败"),
UPDATE_FAIL(3003, "更新失败"),
DELETE_FAIL(3004, "删除失败"),
QUERY_FAIL(3005, "查询失败"),
QUERY_EMPTY(3006, "查询为空"),
QUERY_NOT_EXIST(3007, "查询不存在"), EMAIL_ERROR(2060, "邮箱格式错误"),
PHONE_ERROR(2061, "电话格式错误"), /* 文件读写 */
FILE_IS_NULL(2041, "文件为空"),
FILE_WRONG_FORMAT(2042, "文件格式错误"),
FILE_CHUNK_UPLOAD_ERROR(2043, "文件分块上传失败!"),
FILE_CHUNK_MERGE_ERROR(2044, "文件分块合并失败"),
FILE_CONTENT_ERROR(2045, "上传文件内容错误"), /* 邮箱验证 */
MAILL_ACCOUNT_ERROR(2051, "要重置的邮箱或账号存在错误"),
VERIF_CODE_ERROR(2052,"验证码为空或验证码输入不正确"), /* 登陆电脑的mac地址验证 */
COMP_MAC_NOT_NULL(2071,"电脑的mac地址不能为空"),
COMP_MAC_ERROR(2072,"登录的电脑mac地址未注册"),
COMP_MAC_FORM_ERROR(2073,"输入的mac地址格式不正确"),
COMP_NAME_NOT_NULL(2074,"未输入电脑名称"),
COMP_MAC_REPEAT(2075,"传入的mac地址已经被注册"), /** 数据导出 */
EXPORT_FAILURE(2100, "导出失败"),
/** 数据导入 */
IMPORT_FAILURE(2101,"导入失败"); /**
* 返回码
*/
private Integer code; /**
* 返回消息
*/
private String message; ResultCode(Integer code, String message) {
this.code = code;
this.message = message;
} }

代码中使用

@RequestMapping(value = "/test", method = RequestMethod.GET)
public ResultBean test() {
String str = "测试接口成功!";
System.out.println(str);
// return ResultBean.success();
// return ResultBean.success("测试成功");
// return ResultBean.success(str);
return ResultBean.fail(ResultCode.PARAM_IS_BLANK);
// 还有很多种返回方式
}

SpringBoot 配置统一API对象返回的更多相关文章

  1. SpringBoot之封装json对象返回json数据

    /** * @description:封装json对象,所有返回结果都使用它 **/ public class Result<T> { private int code;// 业务自定义状 ...

  2. 自定义统一api返回json格式(app后台框架搭建三)

    在统一json自定义格式的方式有多种:1,直接重写@reposeBody的实现,2,自定义一个注解,自己去解析对象成为json字符串进行返回 第一种方式,我就不推荐,想弄得的话,可以自己去研究一下源码 ...

  3. Spring Boot 无侵入式 实现RESTful API接口统一JSON格式返回

    前言 现在我们做项目基本上中大型项目都是选择前后端分离,前后端分离已经成了一个趋势了,所以总这样·我们就要和前端约定统一的api 接口返回json 格式, 这样我们需要封装一个统一通用全局 模版api ...

  4. SpringBoot 如何统一后端返回格式?老鸟们都是这样玩的!

    大家好,我是飘渺. 今天我们来聊一聊在基于SpringBoot前后端分离开发模式下,如何友好的返回统一的标准格式以及如何优雅的处理全局异常. 首先我们来看看为什么要返回统一的标准格式? 为什么要对Sp ...

  5. SpringBoot 如何统一后端返回格式

    在前后端分离的项目中后端返回的格式一定要友好,不然会对前端的开发人员带来很多的工作量.那么SpringBoot如何做到统一的后端返回格式呢?今天我们一起来看看. 为什么要对SpringBoot返回统一 ...

  6. C++11用于计算函数对象返回类型的统一方法

    [C++11用于计算函数对象返回类型的统一方法] 模板 std::result_of 被TR1 引进且被 C++11 所采纳,可允许我们决定和使用一个仿函数其回返值的类别.底下,CalculusVer ...

  7. springboot配置Druid数据源

    springboot配置druid数据源 Author:SimpleWu springboot整合篇 前言 对于数据访问层,无论是Sql还是NoSql,SpringBoot默认采用整合SpringDa ...

  8. springboot配置server相关配置&整合模板引擎Freemarker、thymeleaf&thymeleaf基本用法&thymeleaf 获取项目路径 contextPath 与取session中信息

    1.Springboot配置server相关配置(包括默认tomcat的相关配置) 下面的配置也都是模板,需要的时候在application.properties配置即可 ############## ...

  9. SpringBoot 构建RestFul API 含单元测试

    相关博文: 从消费者角度评估RestFul的意义 SpringBoot 构建RestFul API 含单元测试 首先,回顾并详细说明一下在快速入门中使用的  @Controller .  @RestC ...

  10. SpringBoot 配置提示功能

    目的 配置自动提示的辅助功能可以让配置写起来更快,准确率大大提高. springboot jar 包含提供所有支持的配置属性细节的元数据文件.文件的目的是为了让 IDE 开发者在用户使用 applic ...

随机推荐

  1. Qt QMainWindow的使用

    参考视频:黑马科技:https://www.bilibili.com/video/BV1XW411x7NU?p=19 QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu b ...

  2. 使用Visual Studio分析.NET Dump

    前言 内存泄漏和高CPU使用率是在日常开发中经常遇到的问题,它们可能会导致应用程序性能下降甚至崩溃.今天我们来讲讲如何使用Visual Studio 2022分析.NET Dump,快速找到程序内存泄 ...

  3. .NET C# 程序自动更新组件

    引言 本来博主想偷懒使用AutoUpdater.NET组件,但由于博主项目有些特殊性和它的功能过于多,于是博主自己实现一个轻量级独立自动更新组件,可稍作修改集成到大家自己项目中,比如:WPF/Winf ...

  4. CF1815

    CF1815 Div. 1 确实难,Virtual Contest 上只完成了两道题,想出来了三道题. A. Ian and Array Sorting 秒切题--考虑将前 \(n - 1\) 个数变 ...

  5. leetcode | 103. 二叉树的锯齿形层序遍历 | JavaScript实现

    题目 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 .(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 思路 按照正常的层序遍历,然后再对下标为奇数的数组进 ...

  6. https请求,Java代码忽略https证书:解决No subject alternative names present问题

    https请求,Java代码忽略https证书:解决No subject alternative names present问题 package com.test.utils; import org. ...

  7. 接口签名规则及Java代码demo实现

    接口签名规则及Java代码demo实现 签名规则 签名生成的通用步骤如下: 第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用UR ...

  8. redis zset 延迟合并任务处理

    redis zset 延迟合并任务处理 @Autowired public RedisTemplate redisTemplate; ##1.发送端:在接口中收集任务ID,累计时间段之后,合并处理. ...

  9. Mybatis if判断中使用了Ognl关键字导致报错解决方法

    mybatis xml中使用OGNL解析参数,如果直接使用了关键字则会导致解析失败. 常见的关键字有: 字段 mybatis关键字 bor (字符|)的英文 xor 字符^的英文 and 字符& ...

  10. mysql这个垃圾迁移数据费劲半天

    mysql垃圾得很!  对于一些小系统还可以.大型系统自己找麻烦--必须有高昂的人工费! 没有高昂的人工(必须有好的程序员和工程师才能解决一些复杂的问题),构建基于大量数据的应用,非常麻烦. 而这些费 ...