SpringBoot 基础篇


文章目录

  • SpringBoot
  • SpringBoot 基础篇
  • 4 基于 SpringBoot 的SSMP 整合案例
  • 4.11 表现层数据一致性处理【R对象】
  • 4.11.1 问题引入
  • 4.11.2 实现前后端数据协议
  • 4.11.3 小结


4 基于 SpringBoot 的SSMP 整合案例

4.11 表现层数据一致性处理【R对象】
4.11.1 问题引入

之前我们其实已经实现了表现层接口,但是有个痛点

我增删改的时候返回true/false

查单条返回一条json 数据

查全部的时候返回一个json 数据【“前端”痛点】

spring boot整合 doris springboot整合bootstrap_spring boot

spring boot整合 doris springboot整合bootstrap_后端_02

【第一步】

spring boot整合 doris springboot整合bootstrap_表现层_03

都去data 中取数据,这样封装问题又来了

某一次咱们查了一个id 不存在的数据

spring boot整合 doris springboot整合bootstrap_表现层_04

这个时候就意义冲突了

spring boot整合 doris springboot整合bootstrap_java_05

这个null 就出现了歧义【到底是查不到数据,还是服务器的问题】

【第二步】加个flag

spring boot整合 doris springboot整合bootstrap_后端_06

意思就是咱们得把controller 里面的返回结果统一格式

→ 设计表现层返回结果的模型类,用于后端与前端进行数据格式统一,也称为前后端数据协议

4.11.2 实现前后端数据协议
package com.dingjiaxiong.controller.utils;

import lombok.Data;

/**
 * ClassName: R
 * date: 2022/10/17 20:43
 *
 * @author DingJiaxiong
 */

@Data
public class R {

    private Boolean flag;
    private Object data;

    public R() {
    }

    public R(Boolean flag) {
        this.flag = flag;
    }

    public R(Boolean flag, Object data) {
        this.flag = flag;
        this.data = data;
    }
}

修改controller

package com.dingjiaxiong.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dingjiaxiong.controller.utils.R;
import com.dingjiaxiong.domain.Book;
import com.dingjiaxiong.service.IBookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * ClassName: BookController
 * date: 2022/10/17 20:12
 *
 * @author DingJiaxiong
 */

@RestController
@RequestMapping("/books")
public class BookController {

    @Autowired
    private IBookService bookService;

    @GetMapping
    public R getAll(){
        return new R(true,bookService.list());
    }

    @PostMapping
    public R save(@RequestBody Book book){
        return new R(bookService.save(book));
    }

    @PutMapping
    public R update(@RequestBody Book book){
        return new R(bookService.updateById(book));
    }

    @DeleteMapping("/{id}")
    public R delete(@PathVariable Integer id){
        return new R(bookService.removeById(id));
    }

    @GetMapping("/{id}")
    public R getById(@PathVariable Integer id){
        return new R(true,bookService.getById(id));
    }

    @GetMapping("/{currentPage}/{pageSize}")
    public R getPage(@PathVariable int currentPage ,@PathVariable int pageSize){
        return new R(true,bookService.getPage(currentPage, pageSize));
    }

}

直接重启服务器,开测

查询全部

spring boot整合 doris springboot整合bootstrap_表现层_07

查询单个

spring boot整合 doris springboot整合bootstrap_spring boot整合 doris_08

查询一个不存在的

spring boot整合 doris springboot整合bootstrap_spring boot_09

新增

spring boot整合 doris springboot整合bootstrap_表现层_10

修改

spring boot整合 doris springboot整合bootstrap_java_11

删除

spring boot整合 doris springboot整合bootstrap_java_12

OK,就是这样

小结一下

  • 设计表现层返回结果的模型类,用于后端与前端进行数据格式统一,也称为前后端数据协议
  • 表现层接口统一返回值类型结果
4.11.3 小结
  1. 设计统一的返回值结果类型便于前端开发读取数据
  2. 返回值结果类型可以根据需求自行设定,没有固定格式
  3. 返回值结果模型类用于后端与前端进行数据格式统一,也称为前后端数据协议