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

表现层标准开发

表现层的开发使用基于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请求

image.png

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

image.png

image.png

DELETE请求与GET请求类似

image.png

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

image.png

PUT请求与POST请求类似

image.png

总结:

  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. 返回值结果模型类用于后端与前端进行数据格式统一,也称为前后端数据协议

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYCQMFjF' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片