springboot实战(17)(“大事件“——新增文章主体逻辑)
目录
一、新增文章涉及的数据表、实体类。
(1)表结构。
(2)实体类(Article)
二、接口文档分析。
(1)请求方式与请求路径。
(2)请求参数。
(3)响应数据。
三、具体分析与实现。
(1)各层实现的分析。
1、controller层。
2、service、mapper层。
(2)具体代码。
1、ArticleController层。
2、ArticleService层。
3、ArticleServiceImpl实现类。
4、ArticleMapper层。
(3)后端接口测试。(postman)
(4)问题与分析。
一、新增文章涉及的数据表、实体类。
(1)表结构。
- article:文章表。
- id(主键)
- title(文章标题)
- content(文章正文)
- cover_img(文章封面:存的是图片地址。而图片的数据存放在阿里云的服务器)
- state(文章状态:已发布/草稿)
- category_id(文章分类id:文章分类表的主键。表示该文章是属于哪种类别:如军事、时事、风景等等)
- create_user(用户id:表示当前文章是哪个用户创建的。用户只能对自己的文章进行删改操作)
- create_time、update_time(创建文章时间、修改文章时间)
(2)实体类(Article)
二、接口文档分析。
(1)请求方式与请求路径。
- 请求方式:post。
- 请求路径:"/article"。
(2)请求参数。
- 格式:JSON格式数据。
- 注意下面。
- state(文章状态)只有两种,"已发布"或"草稿"。所有参数都是必须要传的。
- title必须是1~10长度的非空字符。
- coverImg必须是一个地址!
- 所以后面在后端代码中都需要对这些参数进行校验!
- 请求样例。
(3)响应数据。
- 格式:JSON数据格式。
- code(响应的状态码:0或1)、message、data。
三、具体分析与实现。
(1)各层实现的分析。
1、controller层。
- controller层创建一个ArticleController类。(完成文章管理相关接口开发)
- 新增文章方法上添加注解@PostMapping。(post请求)并在方法参数中声明一个Article实体类对象,用它接收前端传递的JOSN格式数据。
2、service、mapper层。
- 同样需要提供ArticleService、ArticleServiceImpl、ArticleMapper(数据访问层)等等。
- controller层调用service层方法完成添加操作、mapper层编写sql语句完成新增文章操作。
(2)具体代码。
1、ArticleController层。
package com.feisi.controller; import com.feisi.pojo.Article; import com.feisi.pojo.Result; import com.feisi.service.ArticleService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; /** * @Title: ArticleController * @Author HeYouLong * @Package com.feisi.controller * @Date 2024/9/19 下午5:33 * @description: */ @RestController @RequestMapping("/article") public class ArticleController { //注入service对象 @Autowired private ArticleService articleService; @PostMapping public Result add(@RequestBody Article article){ articleService.add(article); return Result.success(); } }
2、ArticleService层。
package com.feisi.service; import com.feisi.pojo.Article; /** * @Title: ArticleService * @Author HeYouLong * @Package com.feisi.service * @Date 2024/11/24 下午9:35 * @description: 文章操作业务层接口 */ public interface ArticleService { /** * 新增文章(发布文章) * @param article */ void add(Article article); }
3、ArticleServiceImpl实现类。
package com.feisi.service.impl; import com.feisi.mapper.ArticleMapper; import com.feisi.pojo.Article; import com.feisi.service.ArticleService; import com.feisi.utils.ThreadLocalUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.util.Map; /** * @Title: ArticleServiceImpl * @Author HeYouLong * @Package com.feisi.service.impl * @Date 2024/11/24 下午9:35 * @description: 文章操作业务层实现类 */ @Service public class ArticleServiceImpl implements ArticleService { //注入mapper层对象 @Autowired private ArticleMapper articleMapper; @Override public void add(Article article) { //补充属性值 article.setCreateTime(LocalDateTime.now()); article.setUpdateTime(LocalDateTime.now()); //从ThreadLocal里面拿到id Map<String, Object> map = ThreadLocalUtil.get(); //得到当前用户登录的id Integer userId = (Integer) map.get("id"); article.setCreateUser(userId); //调用mapper层新增方法 articleMapper.add(article); } }
4、ArticleMapper层。
package com.feisi.mapper; import com.feisi.pojo.Article; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; /** * @Title: ArticleMapper * @Author HeYouLong * @Package com.feisi.mapper * @Date 2024/11/24 下午9:36 * @description: 文章操作数据访问层接口 */ @Mapper public interface ArticleMapper { @Insert("insert into article(title,content,cover_img,state,category_id,create_user,create_time,update_time) " + "values (#{title},#{content},#{coverImg},#{state},#{categoryId},#{createUser},#{createTime},#{updateTime})") void add(Article article); }
(3)后端接口测试。(postman)
- 打开postman工具。导入提前准备好的测试用例。
- 打开后的整体展示。
- 配置登录token验证令牌。(请求头)
- 先去登录,拿到最新的token令牌。
- 给文章管理测试接口统一配置请求头。
- 数据库数据(文章分类表)
- 添加一篇关于"人文"的文章。
- 数据成功进入数据库!
(4)问题与分析。
- 这里并没有完成一些特定属性的校验。(如字符串长度、非空规定等等)
- 目前只是完成了新增文章的主体逻辑部分。也就是并没有对前端提交的数据进行校验!
- 这部分的完成——需要使用Validation框架提供的自定义校验知识。