开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第22天,点击查看活动详情
后台查看和编辑图书
查看图书
1.控制器定义查看接口
@GetMapping("/id/{id}")
@ResponseBody
public Map selectById(@PathVariable("id") Long bookId) {
Map result = new HashMap<>();
Book book = bookService.selectById(bookId);
result.put("code", 0);
result.put("msg", "success");
result.put("data", book);
return result;
}
代码说明:
- @GetMapping("/id/{id}"):{id}必须和@PathVariable("id")同名才行,不然会接受不到参数,程序会出错
2.重启应用
可以看到详情接口正常返回
编辑图书
1.定义service
2.实现更新方法
@Override
@Transactional
public Book update(Book book) {
bookMapper.updateById(book);
return book;
}
代码说明:
@Transactional:开启事务处理
3.处理控制器更新方法
@PostMapping("/update")
@ResponseBody
public Map update(Book book) {
Map result = new HashMap<>();
try {
//先查出原始数据,拼接对应的
Book rawBook = bookService.selectById(book.getBookId());
rawBook.setCategoryId(book.getCategoryId());
rawBook.setBookName(book.getBookName());
rawBook.setSubTitle(book.getSubTitle());
rawBook.setAuthor(book.getAuthor());
rawBook.setDescription(book.getDescription());
Document doc = Jsoup.parse(book.getDescription());
String cover = doc.select("img").first().attr("src");
rawBook.setCover(cover);
bookService.update(rawBook);
result.put("code",0);
result.put("msg","success");
}catch (BusinessException ex){
ex.printStackTrace();
result.put("code",ex.getCode());
result.put("msg",ex.getMsg());
}
return result;
}
代码说明:
- Book rawBook = bookService.selectById(book.getBookId()):更新方法,一般是先通过id把数据查询出来,再更新指定对应的字段,如果直接通过对象来更新,会导致该数据的其他字段也会被更新,造成脏数据
- try{}catch(Exception ex):涉及到更新操作需要捕获异常,并且把对应的报错信息展示在接口返回字段,以便排查问题
- String cover = doc.select("img").first().attr("src"):修改了详情页,可能会把封面替换掉,所以我们要使用Jsoup重新获取一遍description的文档信息,提取第一张图片作为封面