SSM整合(二) | 表现层数据封装格式及封装步骤

这篇具有很好参考价值的文章主要介绍了SSM整合(二) | 表现层数据封装格式及封装步骤。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

表现层数据封装

数据返回格式

表现层数据封装是什么意思呢? 我们根据目前做的增删改查功能来看看目前返回数据的格式存在哪些问题

增删改的数据返回格式如下:

true

查询单条数据的返回格式如下:

{
    "id": 1,
    "type": "计算机理论",
    "name": "Spring实战 第5版",
    "description": "Spring入门经典教程"
}

查询全部数据的返回格式如下:

[
    {
        "id": 1,
        "type": "计算机理论",
        "name": "Spring实战 第5版",
        "description": "Spring入门经典教程"
    },
    {
        "id": 2,
        "type": "计算机理论",
        "name": "Spring 5核心原理与30个类手写实战",
        "description": "十年沉淀之作"
    }
]

可以发现, 目前增删改的操作返回的数据是一个布尔值, 查询单条返回的是一个对象, 查询全部返回的又是一个数组; 那么前端人员在进行不同的操作时就需要用不同的数据类型接收

因此我们需要对数据整合, 返回一个统一的数据格式给前端人员; 于是我们就统一了一个前端接收数据的格式: 创建结果模型类,封装数据到data属性中

增删改的数据统一格式后如下:

{
    "data":true
}

查询单个数据统一格式后如下:

{
    "data":{
        "id": 1,
        "type": "计算机理论",
        "name": "Spring实战 第5版",
        "description": "Spring入门经典教程"
    }
}

查询全部数据统一格式后如下:

{
    "data":[
        {
            "id": 1,
            "type": "计算机理论",
            "name": "Spring实战 第5版",
            "description": "Spring入门经典教程"
        },
        {
            "id": 2,
            "type": "计算机理论",
            "name": "Spring 5核心原理与30个类手写实战",
            "description": "十年沉淀之作"
        }
    ]
}

但是目前又存在一个新的问题: 增删改的操作返回的数据都是一样的, 那么前端拿到数据后如何区分这个操作是添加还是删除或者是修改呢?

SSM整合(二) | 表现层数据封装格式及封装步骤

针对区分数据, 我们在模型类中新增一个code属性, 将操作结果封装到code属性中

例如后端和前端约定好:

  • 20011代表新增操作
  • 20021代表删除操作
  • 20031代表修改操作
  • data中的属性为true就是删除成功, 为false就删除失败
{
    "code": 20011,
    "data": false
}
{
    "code": 20021,
    "data": true
}
{
    "code": 20031,
    "data": true
}

我们查询的操作也是需要与前端约定好一个数字代表, 例如20041; 查询单个和查询全部都是20041

{
    "code": 20041,
    "data":{
        "id": 1,
        "type": "计算机理论",
        "name": "Spring实战 第5版",
        "description": "Spring入门经典教程"
    }
}
{
    "code": 20041,
    "data":[
        {
            "id": 1,
            "type": "计算机理论",
            "name": "Spring实战 第5版",
            "description": "Spring入门经典教程"
        },
        {
            "id": 2,
            "type": "计算机理论",
            "name": "Spring 5核心原理与30个类手写实战",
            "description": "十年沉淀之作"
        }
    ]
}

如果此时前端查询了一条不存在的数据, 一定是下面这样的返回结果, 那么这个20041是代表成功还是失败呢?

此时前端人员是不知道的, 还需要将data中的属性取出来才知道

{
    "code": 20041,
    "data":null
}

此时又有新的约定, 最后一位只要是0那么就代表查询失败, 我们使用20040代表查询失败; 前端知道查询失败后就不会再去data属性中取数据

{
    "code": 20040,
    "data": null,
}

查询失败后, 我们需要封装特殊消息到message(msg)属性中, 例如返回一句文本提示查询失败; 到这里模型类的最终形式就确定下来了

目前, 前端人员在查询结果为20041时, 去data中取数据, 查询结果为20040时, 将msg中的提示信息展示出来;

{
    "code": 20040,
    "data": null,
    "msg": "数据查询失败,请重试!"
}

数据封装

我们需要定义一个模型类, 例如Result, 统一数据的返回结果

模型类我们一般定义在controller包下

public class Result {
  	private Object data;
  	private Integer code;
  	private String msg;
}

注意:

Result类中的字段并不是固定的,可以根据需要自行增减

也可以提供若干个构造方法,方便操作

public class Result {
    private Object data;
    private Integer code;
    private String msg;

    public Result() {
    }

    public Result(Integer code, Object data) {
        this.data = data;
        this.code = code;
    }

    public Result(Integer code, Object data, String msg) {
        this.data = data;
        this.code = code;
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

controller包下创建一个Code类, 用于设置统一数据返回结果编码

Code类的常量设计也不是固定的,可以根据需要自行增减,例如将查询再进行细分为SELECT_OK,SELECT_ALL_OK,SELECT_PAGE_OK

public class Code {
    public static final Integer SAVE_OK = 20011;
    public static final Integer DELETE_OK = 20021;
    public static final Integer UPDATE_OK = 20031;
    public static final Integer SELECT_OK = 20041;

    public static final Integer SAVE_ERR = 20010;
    public static final Integer DELETE_ERR = 20020;
    public static final Integer UPDATE_ERR = 20030;
    public static final Integer SELECT_ERR = 20040;
}

controller包下BookController中的控制器方法就需要发生变化, 返回结果应全部返回Result对象

@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
    private BookService bookService;

    @PostMapping
    public Result save(@RequestBody Book book) {
        boolean flag = bookService.save(book);
        return new Result(flag ? Code.SAVE_OK: Code.SAVE_ERR, flag);
    }

    @DeleteMapping("/{id}")
    public Result delete(@PathVariable Integer id) {
        boolean flag = bookService.delete(id);
        return new Result(flag ? Code.DELETE_OK: Code.DELETE_ERR, flag);
    }

    @PutMapping
    public Result update(@RequestBody Book book) {
        boolean flag = bookService.update(book);
        return new Result(flag ? Code.UPDATE_OK: Code.UPDATE_ERR, flag);
    }

    @GetMapping
    public Result selectAll() {
        List<Book> books = bookService.selectAll();
        boolean flag = books != null;
        Integer code = flag ? Code.SELECT_OK: Code.SELECT_ERR;
        String mes = flag ? "": "数据查询失败, 请重试!";
        return new Result(code, books, mes) ;
    }

    @GetMapping("/{id}")
    public Result selectById(@PathVariable Integer id) {
        Book book = bookService.selectById(id);
        boolean flag = book != null;
        Integer code = flag ? Code.SELECT_OK: Code.SELECT_ERR;
        String msg = flag ? "": "数据查询失败, 请重试!";
        return new Result(code, book, msg);
    }
}

到这里, 前端发送请求向后端获取的数据就是统一格式了文章来源地址https://www.toymoban.com/news/detail-430684.html

{
    "data": {
        "id": 2,
        "type": "测试修改",
        "name": "测试修改",
        "description": "测试修改"
    },
    "code": 20041,
    "msg": ""
}

到了这里,关于SSM整合(二) | 表现层数据封装格式及封装步骤的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【FFmpeg】ffmpeg 命令行参数 ⑤ ( 使用 ffmpeg 命令提取 音视频 数据 | 保留封装格式 | 保留编码格式 | 重新编码 )

    使用 ffmpeg 命令 从 视频数据 中 提取 音频数据 / 视频数据 保留封装格式 , 封装格式 指的就是 封装 视频数据 的 容器 ; 一个 mp4 格式的视频 , 其 封装容器 就是 mp4 容器 , 其中 封装了 h.264 格式的视频数据 和 aac 格式的 音频数据 ; 执行 命令 , 从 input.mp4 输入文件中 , 提取 音频

    2024年03月23日
    浏览(59)
  • 【音视频 | Ogg】Ogg封装格式详解——包含Ogg封装过程、数据包(packet)、页(page)、段(segment)等

    😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭 🤣本文内容🤣:🍭介绍Ogg文件格式🍭 😎金句分享😎:🍭子曰:见贤思齐焉,见不贤而内自省也。——《论语·里仁篇》。意思是,看见德才兼备的人就

    2024年02月06日
    浏览(50)
  • SSM整合-Spring整合SringMVC、Mybatis,ssm测试

    ​ SSM(Spring + SpringMVC + Mybatis) 整合,就是三个框架协同开发。 Spring 整合 Mybatis,就是将 Mybatis 核心配置分拣当中数据源的配置、事务管理、工厂的配置、Mapper接口的实现类等 交给Spring进行管理。 mybatisConfig.xml配置信息 整合到 SpringConfig.xml Spring 整合 SpringMVC,就是在web.xml当中

    2023年04月22日
    浏览(52)
  • 整合SSM框架 -- 简单基础SSM项目

    学完MyBatis、Spring、SpringMVC,做一个基于SSM框架的基础项目–书籍管理系统,要求可以实现数据的增删改查,业务运行逻辑明了,分层开发,用来巩固学习 目标: 配置SSM框架 实现基础的增删改查功能 具备后续方便的拓展功能 界面设计整洁 最终效果: 全部书籍页面 新增书籍

    2024年02月08日
    浏览(56)
  • SSM项目小例子,SSM整合图文详细教程

    今天来搭建一个SSM项目的小例子简单练一练,那项目模板还是我们那个模板,就是我们在JavaWeb最后的小例子,那到SSM中我们如何实现,后面我们再看看springboot中如何实现 javaweb中项目例子: https://blog.csdn.net/hello_list/article/details/124734814 首先我们来搭建一个SSM项目,同时也是

    2024年02月06日
    浏览(47)
  • SSM+Shiro安全框架整合(完成安全认证--登录+权限授权)+ssm整合shiro前后端分离

    目录 1.搭建SSM框架  1.1.引入相关的依赖 1.2. spring配置文件 1.3. web.xml配置文件 1.4.配置Tomcat并启动 2.ssm整合shiro---认证功能  (1).引入依赖 (2).修改spring配置文件 (3).修改web.xml文件 (4).新建login.jsp(登录页面) (5).新建success.jsp(登录成功后跳转到此) (6).创建User实体类 (7).创建LoginVo

    2024年02月15日
    浏览(46)
  • SSM学习记录9:SpringBoot整合SSM(注解方式)

    启动SpringBootDemoApplication↓ springBoot项目内含tomcat服务器,无需手动配置↓ 测试结果↓ 上下图来自黑马程序员的视频教程,点击查看教程 配置文件yml与yaml语法↓ 配置文件数据读取方式(3种)↓ 配置文件: 读取方式: 若自定义方式出现警告↓ Test加载的是同级目录下的类,

    2024年02月09日
    浏览(38)
  • SSM整合 配置文件

       bean,xml jdbc.properties springmvc.xml web.xml 拦截器 文件上传

    2024年02月11日
    浏览(34)
  • SSM 整合案例

    Ssm整合 注意事项 Spring mvc+Spring+Mybatis+MySQL 项目结构,以web项目结构整合(还有maven、gradle) 整合日志、事务一个项目中 Idea 2019、JDK12、Tomcat9、MySQL 5.5 项目结构   D:javaIdeaIdea_spaceworkSSMhzy :不会就去找项目案例重新学习 web项目为主结构,建立web目录,目录下有index.jsp和WE

    2024年02月09日
    浏览(34)
  • SSM整合详细教学(下)

    1 准备工作 为了确保静态资源能够被访问到,需要设置静态资源过滤 2 列表查询功能 前端代码 3 添加功能 前端代码 后台代码改进 4 修改功能 显示弹出框查询图书信息 保存修改后的图书信息 5 删除功能 1 拦截器简介 问题导入 问题1:拦截器拦截的对象是谁? 问题2:拦截器和

    2024年02月03日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包