当前位置: 首页 > news >正文

后台框架-统一数据格式

现在BS架构的应用一般都采用前后端分离的架构,前端技术框架可采用VUE等,后端框架目前成熟且使用广泛的就是基于SpringBoot开发的后端微服务框架。

数据格式

这里主要介绍一下如何实现返回统一的数据格式,比如返回的样例数据如下图所示:
在这里插入图片描述

项目结构

新建一个SpringBoot项目如下,目录结构以及相关文件如下所示:
在这里插入图片描述
先定义返回的数据实体,需要两个类:

ResultEnum

package org.example.web.model;import lombok.AllArgsConstructor;
import lombok.Getter;@AllArgsConstructor
@Getter
public enum ResultEnum {SUCCESS(200, "操作成功"),FAIL(300,"获取数据失败"),USER_NOT_FOUND(301,"用户不存在,请重新登录"),ERROR(302,"错误请求"),USERNAME_PASSWORD_ERROR(303,"用户名或密码错误"),INVALID_TOKEN(400,"无效Token,请重新登录"),TOKEN_VERIFY_ERROR(401,"Token验证失败,请重新登录"),TOKEN_EXPIRE(402,"token已过期");private final Integer code;private final String msg;public static ResultEnum getResult(Integer code){for (ResultEnum value : ResultEnum.values()) {if (code.equals(value.getCode())){return value;}}return ResultEnum.ERROR;}
}

前后端交互实体R

package org.example.web.model;import lombok.Data;import java.io.Serializable;@Data
public class R<T> implements Serializable {private static final long serialVersionUID = 56665257244236049L;private Integer code;private String message;private T data;private R() {}public static <T> R<T> ok(T data) {R<T> response = new R<>();response.setCode(ResultEnum.SUCCESS.getCode());response.setMessage(ResultEnum.SUCCESS.getMsg());response.setData(data);return response;}public static <T> R<T> error(Integer errCode, String errMessage) {R<T> response = new R<>();response.setCode(errCode);response.setMessage(errMessage);return response;}public static <T> R<T> error(ResultEnum responseEnum) {R<T> response = new R<>();response.setCode(responseEnum.getCode());response.setMessage(responseEnum.getMsg());return response;}
}

实体类User

package org.example.web.model;import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Builder;
import lombok.Data;import java.util.Date;@Data
@Builder
public class User {private String id;private String username;@JsonIgnoreprivate String password;private String name;private Integer age;@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")private Date createTime;
}

为了便于属性赋值,这里采用lombok的链式赋值,使用@Builder注解,用法如下:

// 实例化一个对象
User user = User.builder().id("1").username("test").name("张三").age(20).createTime(new Date()).build();

当实体的某些属性需要格式化时,比如时间,可使用@JsonFormat,参数说明如下:
pattern:时区
timezone:时区
@JsonFormat 默认是标准时区的时间,中国地区会少8小时,因此使用时,按需求加上时区,北京时间为东八区,timezone=“GMT+8”

接口IndexController

package org.example.web.controller;import org.example.web.model.R;
import org.example.web.model.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.Date;@RestController
public class IndexController {// http://127.0.0.1:8080/user@RequestMapping("/user")public R<User> user() {User user = User.builder().id("1").username("test").name("张三").age(20).createTime(new Date()).build();return R.ok(user);}}

运行

运行后,访问http://localhost:8080/user
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 网站建设完成后, 做seo必须知道的专业知识之--蜘蛛陷阱
  • 如何防范ddos 攻击
  • 二分查找精炼回顾-kevin
  • 在线压缩pdf,无需安装就可轻易压缩pdf文件
  • Axure RP下载+详细安装步骤资源百度云盘分享
  • Flask框架 完整实战案例 附代码解读 【3】
  • 【CSS】如何写渐变色文字并且有打光效果
  • OceanBase V4.2解析:如何用迭代器 Generator快速生成任意数据
  • DS18B20温度传感器详解(STM32)
  • MySQL基础学习:MySQL主从复制如何实现
  • 在HarmonyOS中灵活运用Video组件实现视频播放
  • Golang | Leetcode Golang题解之第385题迷你语法分析器
  • Level3 — PART 4 机器学习算法 — 集成学习
  • RK3568 Android 11 蓝牙BluetoothA2dpSink 获取用于生成频谱的PCM
  • 测试 UDP 端口可达性的方法
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • conda常用的命令
  • ES6语法详解(一)
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Lucene解析 - 基本概念
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • SOFAMosn配置模型
  • 阿里云购买磁盘后挂载
  • 半理解系列--Promise的进化史
  • 订阅Forge Viewer所有的事件
  • 关于Flux,Vuex,Redux的思考
  • 计算机常识 - 收藏集 - 掘金
  • 聊聊hikari连接池的leakDetectionThreshold
  • 如何在GitHub上创建个人博客
  • 使用Swoole加速Laravel(正式环境中)
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 小而合理的前端理论:rscss和rsjs
  • ​Java并发新构件之Exchanger
  • ​Python 3 新特性:类型注解
  • $.each()与$(selector).each()
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (6)添加vue-cookie
  • (9)目标检测_SSD的原理
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (java)关于Thread的挂起和恢复
  • (libusb) usb口自动刷新
  • (独孤九剑)--文件系统
  • (二)学习JVM —— 垃圾回收机制
  • (理论篇)httpmoudle和httphandler一览
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (算法二)滑动窗口
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转载)Linux网络编程入门
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .net core Redis 使用有序集合实现延迟队列
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET 材料检测系统崩溃分析
  • .NET 分布式技术比较
  • .NET 漏洞分析 | 某ERP系统存在SQL注入