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. IMX6ULL基本环境搭建

    基本环境搭建 1 交叉编译工具 在虚拟机中安装交叉编译工具,为后续开发做准备. 1.1 工具版本 工具版本:Linaro Releases 当前虚拟机为64位系统,因此下载64位系统的工具: $ un ...

  2. ARC169

    A 我们定义 \(dp_{dep}\) 为第 \(dep\) 层会对上一层产生多少的影响. 如果有一层的影响大于 \(0\),在足够次计算后那么肯定是正号.如果小于零那就一定是负号. 由于越久影响到的 ...

  3. redis安全篇

    redis被攻击,作为突破口,服务器惨遭毒手的事太常见了. 大多数云服务器被攻击,都是redis,mongodb等数据库被入侵. 因此修改端口,密码,以及注意bind运行地址,是必须. 思考是否要暴露 ...

  4. post请求方式 - 使用restTemplate而不使用httpClient,headers.setContentType(MediaType.APPLICATION_JSON_UTF8)

    public static String doPostForJson(String url, String json,String byteAuthorization) { RestTemplate ...

  5. WIndow Server 2019 服务器 MinIO下载并IIS配置反向代理

    1.官网下载并配置 下载MinIO Serve地址(不需要安装,放在目录就行) https://dl.min.io/server/minio/release/windows-amd64/minio.e ...

  6. kylin-3.1.1-bin-hadoop3搭建,构建cube报的错误,Cannot modify dfs.replication at runtime. It is not in list of params that are allowed to be modified at runtime

    主要是每次构建cube时会去读取kylin安装目录下的conf/kylin_hive_conf.xml文件, 副本是无法在hive查询时修改的,注释掉这两项 这个其实还有一些参数的控制: 添加这俩个参 ...

  7. XAF 属性编辑器(PropertyEditor)- 原理篇

    前言 随着 DEV24.1.3 的发布,XAF Blazor 中的属性编辑器(PropertyEditor)也进行了很大的改动,在使用体验上也更接近 WinForm 了,由于进行了大量的封装,理解上没 ...

  8. FFmpeg GL-transition转场的简单使用体验

    写在前面 最近在处理视频,遇到两个视频之间的转场用原生的 xfade写起来很痛苦,实现成本高,难度大:我这里主要用的FFmpeg,就想找一个插件专门干转场这个事:搜索了一翻后找到 GL-transit ...

  9. python Django项目以Debug模式启动和外网访问启动

    一.Django介绍 介绍: 完善的web框架,包括前端和后端的管理,django项目管理: 管理后台访问:后面补充 前端页面访问:根据app/settings.py文件下配置的访问地址 1.1 项目 ...

  10. 上交大开源镜像站下架 Docker Hub 镜像

    ​ 在现代软件开发中,Docker镜像已经成为不可或缺的工具.然而,最近频频出现的Docker镜像下架事件让许多开发者措手不及.突然失去依赖的镜像,不仅打乱了项目进程,还引发了许多不便.那么,面对Do ...