说明:
(1)本篇博客内容说明:
(2)本博客的几个点:
● java中一款不错的HTML解析器:jsoup;
● 其实,目前来看,只要【和前端对接好接口,设置好url,明确了来回的数据格式】,单纯的开发后端的CRUD,其实工作量不大;由此能够感受到,作为主栈是后端的开发者来说,CRUD比较简单;真正复杂和牛批的是:【底层数据库优化】、【并发】、【分布式】、【算法】、【引擎】、【设计模式】、【中间件】、【目前成熟框架的源码】、【计算机组成原理】、【网络协议】、【大数据】、【系统架构优化】等;
● 通过本篇博客的案例,也多少能明白,图文混排的内容,在后端是如何处理的、在数据库中是如何存储的;
目录
1.在BookService接口中,定义一个新增图书的方法:createBook()方法;
2.在BookServiceImpl中,去实现createBook()方法;
3.在MBookController类中,创建新增图书的方法:createBook()方法;
一:前置分析;
然后,需要注意,我们要求wangEditor最少需要传入一张图片;而且,其中的第一张图会默认作为该图书的封面;
……………………………………………………
之所以是【localhost/management/book/create】这个地址:下面给出说明:
……………………………………………………
表单提交的数据分析:
● 当我新增图书时,evaluation_score和evaluation_quantity都是0,这个很容易理解;
● 我们要求wangEditor最少需要传入一张图片;而且,其中的第一张图会默认作为该图书的封面;而wangEditor中的内容就是description,其实一段HTML片段;所以,description这个HTML片段中的,第一个<img>就是cover,这个需要我们在后端处理一下;为了能更好的解决这个需求,引入了java中一款不错的HTML解析器:jsoup;
二:后台接口开发;
1.在BookService接口中,定义一个新增图书的方法:createBook()方法;
2.在BookServiceImpl中,去实现createBook()方法;
附:jsoup简介,在工程中引入jsoup;
访问jsoup的官网:【https://jsoup.org/】;
在pom.xml中,引入jsoup依赖;
<!--java的HTML解析器:jsoup;--> <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.12.1</version> </dependency>
老生常谈的点:引入新依赖后,如有需要,记得添加到发布中去;
3.在MBookController类中,创建新增图书的方法:createBook()方法;
/** * 新增图书 * @param book * @return */ @PostMapping("/create") @ResponseBody public Map createBook(Book book) { Map result = new HashMap(); try { book.setEvaluationQuantity(0); book.setEvaluationScore(0f); //获取图书的description属性值,并解析 Document document = Jsoup.parse(book.getDescription()); //获取图书description属性中的,第一个图片的元素对象 Element img = document.select("img").first(); //获取改图片元素的,src属性值 String cover = img.attr("src"); //给book对象的cover属性,赋值 book.setCover(cover); bookService.createBook(book); result.put("code", 0); result.put("msg", "success"); } catch (BussinessException ex) { ex.printStackTrace(); result.put("code", ex.getCode()); result.put("msg", ex.getMsg()); } return result; }
说明:
(1)url要对的上;
(2)前端表单的输入项,就是针对Book来的,而且其命名符合Book属性;所以,后端可以用Book实体类去接收;
(3)然后,就是补全Book的属性:其中用到了java中一款不错的HTML解析器:jsoup;
(4)然后,就是调用BookService中定义的createBook方法;并根据前端的要求返回对应的code和mag信息;
(5)还有一点就是,BookService的createBook()方法没有抛BussinessException异常,但为什么Controller这儿要捕获这个异常呐?:这一点前面说过,BookService的createBook()方法现在没抛BussinessException异常,不代表以后新业务需要来的时候不抛;;;所以,Controller这儿算是提前准备了一手;
4.运行效果;
……………………………………………………
继续执行:可以看到Book的主键ID也回填了:(背后,是Mybatis-Plus已经帮我们做了;)
……………………………………………………
放开断点,让其继续执行:底层数据库也没问题;
……………………………………………………
然后,在前台系统中,也能看到我们新增的那本图书;
至此,图书的新增功能就OK了;下篇博客要做的就是,在后台系统首页上,展示图书的数据表格;