likes
comments
collection
share

基于SpringBoot实现SSMP整合的案例之七 (表现层开发与数据一致性处理)

作者站长头像
站长
· 阅读数 15

表现层标准开发

表现层的开发使用基于Restful的表现层接口开发,功能测试通过Postman工具进行。

表现层接口如下:

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

    @Autowired
    private BookService bookService;

    //查询全部
    @GetMapping
    public List<Book> getAll(){
        return bookService.getAll();
    }

    //添加
    @PostMapping
    //save操作用异步提交发送的话,其参数通过请求体传json数据过来
    public Boolean save(@RequestBody Book book){
        return bookService.save(book);
    }

    //修改
    @PutMapping
    //update操作用的也是请求体参数
    public Boolean update(@RequestBody Book book){
        return bookService.update(book);
    }

    //删除
    @DeleteMapping("{id}")
    //而删除和查询单个操作要使用路径变量来传参
    //@PathVariable :从路径中获取变量
    public Boolean delete(@PathVariable Integer id){
        return bookService.delete(id);
    }

    //查询单条数据
    @GetMapping("{id}")
    public Book getById(@PathVariable Integer id){
        return bookService.getById(id);
    }
}

在使用Postman测试时关注提交类型,对应上即可,不然就会报405的错误码。

普通GET请求

基于SpringBoot实现SSMP整合的案例之七 (表现层开发与数据一致性处理)

GET请求传递路径变量,后台使用@PathVariable接收数据

基于SpringBoot实现SSMP整合的案例之七 (表现层开发与数据一致性处理)

基于SpringBoot实现SSMP整合的案例之七 (表现层开发与数据一致性处理)

DELETE请求与GET请求类似

基于SpringBoot实现SSMP整合的案例之七 (表现层开发与数据一致性处理)

POST请求传递json数据,后台使用@RequestBody接收数据

基于SpringBoot实现SSMP整合的案例之七 (表现层开发与数据一致性处理)

PUT请求与POST请求类似

基于SpringBoot实现SSMP整合的案例之七 (表现层开发与数据一致性处理)

总结:

  1. 基于Restful制作表现层接口

    • 新增:POST
    • 删除:DELETE
    • 修改:PUT
    • 查询:GET
  2. 接收参数

    • 实体数据:@RequestBody
    • 路径变量:@PathVariable

表现层消息一致性处理

目前通过Postman测试后业务层接口功能是通的,但是这样的结果给到前端开发者会出现一个小问题。不同的操作结果所展示的数据格式差异化严重。

每种不同操作返回的数据格式都不一样,需要将所有操作的操作结果数据格式统一起来,需要设计表现层返回结果的模型类,用于后端与前端进行数据格式统一,也称为前后端数据协议

@Data
public class R {
    private Boolean flag;
    private Object data;
}

其中flag用于标识操作是否成功,data用于封装操作数据,现在的数据格式就变了

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

对R模型类添加构造方法:

@Data
public class R {
    private Boolean flag;
    private Object data;

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

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

    public R() {}
}

表现层开发格式也需要转换一下:

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

    @Autowired
    private BookService bookService;

    //查询全部
    @GetMapping
    public R getAll(){
        return new R(true,bookService.getAll());
    }

    //添加
    @PostMapping
    //save操作用异步提交发送的话,其参数通过请求体传json数据过来
    public R save(@RequestBody Book book){
        return new R(bookService.save(book));
    }

    //修改
    @PutMapping
    //update操作用的也是请求体参数
    public R update(@RequestBody Book book){
        return new R(bookService.update(book));
    }

    //删除
    @DeleteMapping("{id}")
    //而删除和查询单个操作要使用路径变量来传参
    //@PathVariable :从路径中获取变量
    public R delete(@PathVariable Integer id){
        return new R(bookService.delete(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));
    }
}

此时,全格式统一,现在后端发送给前端的数据格式就统一了,免去了不少前端解析数据的烦恼。

总结

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