springboot实战(17)(“大事件“——新增文章主体逻辑)

ops/2024/11/25 7:09:29/

目录

一、新增文章涉及的数据表、实体类。

(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层。
java">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对象@Autowiredprivate ArticleService articleService;@PostMappingpublic Result add(@RequestBody Article article){articleService.add(article);return Result.success();}}
2、ArticleService层。
java">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实现类。
java">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层对象@Autowiredprivate ArticleMapper articleMapper;@Overridepublic void add(Article article) {//补充属性值article.setCreateTime(LocalDateTime.now());article.setUpdateTime(LocalDateTime.now());//从ThreadLocal里面拿到idMap<String, Object> map = ThreadLocalUtil.get();//得到当前用户登录的idInteger userId = (Integer) map.get("id");article.setCreateUser(userId);//调用mapper层新增方法articleMapper.add(article);}
}
4、ArticleMapper层。
java">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.ppmy.cn/ops/136506.html

相关文章

RabbitMQ简单应用

概念 RabbitMQ 是一种流行的开源消息代理&#xff08;Message Broker&#xff09;软件&#xff0c;它实现了高级消息队列协议&#xff08;AMQP - Advanced Message Queuing Protocol&#xff09;。RabbitMQ 通过高效的消息传递机制&#xff0c;主要应用于分布式系统中解耦应用…

Java中的网络基础认知(如果想知道Java中有关网络基础的知识,那么只看这一篇就足够了!)

前言&#xff1a;网络基础是现代通信和信息技术的基石&#xff0c;涉及数据传输、网络协议、路由、交换、网络设备以及网络安全等多个方面&#xff0c;深入了解网络基础&#xff0c;不仅能提升技术能力&#xff0c;还能为更复杂的网络架构与应用打下坚实的基础。 ✨✨✨这里是秋…

【Java 解释器模式】实现高扩展性的医学专家诊断规则引擎

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

Python--类

Python 类练习 最近由于工作需要用到Python写脚本&#xff0c;因此,因此&#xff0c;快速学习一下Python. 如果你学过多种语言&#xff0c; 学习Python就很快了。 推荐菜鸟教程Python 3的教程。Link: https://www.runoob.com/python3/python3-tutorial.html 作为学习&#xf…

周末总结(2024/11/24)

工作 人际关系核心实践&#xff1a; 要学会随时回应别人的善意&#xff0c;执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己&#xff0c;抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内&#xff0c;职场社交不要放在5min以外 职场的人际关系在面对利…

前端HTML

声明&#xff1a;以下内容来自泷羽sec的学习笔记&#xff0c;仅作学习&#xff0c;如有按照知识进行破环网络安全&#xff0c;后果自负&#xff01;&#xff01; 泷羽sec&#xff1a;https://space.bilibili.com/350329294/channel/collectiondetail?sid4031268&spm_id_f…

Android \android-sdk\platform-tools\adb.exe start-server‘ failed

发现通知栏里不停发出报错\android-sdk\platform-tools\adb.exe start-server failed -- run manually if necessary 也无法找到链接上的实体设备 最后是端口号被占用。 5037为adb.exe的默认端口号&#xff0c; 查看该宽口号的使用情况&#xff0c;如下操作&#xff1a; 打开命…

038_High_Level_Skip_in_Matlab中的高端跳过循环

循环控制 Matlab的循环控制语句有两个&#xff0c;分别是for和while。for循环是一种计数循环&#xff0c;while循环是一种条件循环。在循环中&#xff0c;有时候我们需要跳过一些循环&#xff0c;这时候就需要用到continue语句&#xff1b;当我们需要提前结束循环&#xff0c;…