基于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请求
GET请求传递路径变量,后台使用@PathVariable接收数据
DELETE请求与GET请求类似
POST请求传递json数据,后台使用@RequestBody接收数据
PUT请求与POST请求类似
总结:
-
基于Restful制作表现层接口
- 新增:POST
- 删除:DELETE
- 修改:PUT
- 查询:GET
-
接收参数
- 实体数据:@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));
}
}
此时,全格式统一,现在后端发送给前端的数据格式就统一了,免去了不少前端解析数据的烦恼。
总结
- 设计统一的返回值结果类型便于前端开发读取数据
- 返回值结果类型可以根据需求自行设定,没有固定格式
- 返回值结果模型类用于后端与前端进行数据格式统一,也称为前后端数据协议
转载自:https://juejin.cn/post/7248242431660884026