社交项目(二十)

76 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第22天,点击查看活动详情

后台查看和编辑图书

查看图书

1.控制器定义查看接口

image.png

@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")同名才行,不然会接受不到参数,程序会出错 image.png

2.重启应用

可以看到详情接口正常返回 image.png

编辑图书

1.定义service

image.png

2.实现更新方法

image.png

@Override
@Transactional
public Book update(Book book) {
   bookMapper.updateById(book);
    return book;
}

代码说明:
@Transactional:开启事务处理

3.处理控制器更新方法

image.png

@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的文档信息,提取第一张图片作为封面

4.重启服务

image.png