Bootstrap

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框架提供的自定义校验知识。

;