消息一致性处理
在后端执行完相应的操作后,我们需要将执行操作后的结果与数据返回前端,前端
调用我们传回去的数据,前端是如何知道我们传回去的数据名称的?
答:前后端遵循了同一个"协议"。这个协议就是定义一个类,该类的属性前后端协商,根据返回数据的不同,调用该类不同的构造方法,
并最终将该类返回前端。
一般前端需要知道操作的成功与失败(flag),后端传回的数据(data),还有需要前端显示的消息(msg),这里定义了下面的类(参考)
@Data
public class R {
private Boolean flag;
private Object data;
private String msg;
public R() {
}
// 用于删改
public R(Boolean flag) {
this.flag = flag;
}
// 用于异常情况
public R(String msg) {
this.flag = false;
this.msg = msg;
}
// 用于查询操作
public R(Boolean flag, Object data) {
this.flag = flag;
this.data = data;
}
// 用于增,并给前端发送结果
public R(Boolean flag, String msg){
this.flag = flag;
this.msg = msg;
}
}
具体的演示,在下面表现层开发展示
表现层开发
表现层开发代码具体如下
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired
private BookService bookService;
@GetMapping
public R getAll(){
return new R(true,bookService.getAll());
}
@GetMapping("/{id}")
public R getById(@PathVariable Integer id){
return new R(true,bookService.getById(id));
}
@PostMapping
public R save(@RequestBody Book book) throws IOException {
Boolean flag = bookService.save(book);
return new R(flag,flag?"保存成功^_^":"保存失败-_-、");
}
@PutMapping
public R update(@RequestBody Book book){
return new R(bookService.update(book));
}
@DeleteMapping("/{id}")
public R delete(@PathVariable Integer id){
return new R(bookService.delete(id));
}
@GetMapping("/{currentPage}/{pageSize}")
public R getPage(@PathVariable Integer currentPage,@PathVariable Integer pageSize,Book book){
//解决删除最后一页,最后一条数据时BUG
IPage<Book> page = bookService.getByPage(currentPage,pageSize,book);
if (currentPage > page.getPages())
page = bookService.getByPage((int)page.getPages(),pageSize,book);
return new R(true,page);
}
}
下面基于Restful使用postman测试
1.根据ID查单个
2.查所有
3.保存
4.根据id删除
5.更改
从上面测试可以看出,每次的返回结果集都是flag,data,msg三个参数,前端人员可以很容易地取自己所需要的数据。
仅为学习过程中,知识点总结,如有错误,欢迎指正~