当前位置: 首页 > article >正文

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


http://www.kler.cn/a/408416.html

相关文章:

  • C0034.在Ubuntu中安装的Qt路径
  • 搜索引擎中广泛使用的文档排序算法——BM25(Best Matching 25)
  • 持续集成与持续部署:CI/CD实现教程
  • MyBatis框架
  • 真实网络安全面试场景题
  • 机器人SLAM建图与自主导航:从基础到实践
  • MySQL的DELETE(删除数据)详解
  • JavaSE 总复习:夯实基础,迈向进阶之路
  • LeetCode 4.寻找两个中序数组的中位数
  • 鸿蒙进阶篇-状态管理之@Provide与@Consume
  • Linux系列-僵尸状态
  • Java基于SpringBoot+Vue的藏区特产销售平台
  • 【创建型设计模式】单例模式
  • flink学习(1)——standalone模式的安装
  • GMAN解读(论文+代码)
  • 【面向对象】Java处理异常的方式
  • STM32抢占优先级不生效
  • 对于相对速度的重新理解 - 插一句
  • MySQL原理简介—10.SQL语句和执行计划
  • 编程中的字节序问题
  • 海信Java后端开发面试题及参考答案
  • 基于python的长津湖评论数据分析与可视化,使用是svm情感分析建模
  • docker 配置代理
  • 如何在 .gitignore 中仅保留特定文件:以忽略文件夹中的所有文件为例
  • hyperf 配置步骤
  • 深入理解CRC:通信可靠性的关键