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

springboot(20)(删除文章分类。获取、更新、删除文章详细)(Validation分组校验)

目录

一、删除文章分类功能。

(1)接口文档。

1、请求路径、请求参数。

2、请求参数。

3、响应数据。

(2)实现思路与代码书写。

1、controller层。

2、service接口业务层。

3、serviceImpl实现类。

4、mapper层。

5、后端接口测试。(postman)

二、获取文章详细功能。

(1)接口文档。

1、请求方式、请求路径、请求参数。

2、响应数据。

(2)实现思路与代码书写。

1、controller层。

2、service层接口业务层。

3、serviceImpl实现类。

4、mapper层。

5、后端接口测试。(postman)

三、更新文章详细功能。

(1)接口文档。

1、请求路径、请求方式。

2、请求参数。

3、响应数据。

(2)实现思路与代码书写。

1、Article实体类。(分组校验)

2、controller层。

3、service业务接口层。

4、serviceImpl层。

5、mapper层。

6、后端接口测试。(postman工具)

四、删除文章功能。

(1)接口文档。

1、请求方式、请求路径、请求参数。

2、响应数据。

(2)实现思路与代码书写。

1、controller层。

2、service业务接口层。

3、serviceImpl实现类。

4、mapper层。

5、后端接口测试。(postman工具)


一、删除文章分类功能。

(1)接口文档。
1、请求路径、请求参数。
  • 请求路径:/category。根据请求方式的不同区分接口的功能。
  • 请求方式:DELETE。


2、请求参数。
  • 参数格式:queryString格式。(如..?username=zhangsan&password=123)


3、响应数据。
  • 响应参数:code(状态码)、message(如操作成功或错误的提示信息)、data(非必须)。

(2)实现思路与代码书写。
1、controller层。
  • 方法上面声明注解@DeleteMapping
  • 并在方法参数中声明一个Integer id,用它接收前端传递的"需要删除"的文章分类id。

  • 记得在参数前指定非空校验。
/*** 用于根据ID删除文章分类* @param id* @return*/@DeleteMappingpublic Result delete(/*@Validated(Category.Delete.class)*/ @NotNull Integer id){categoryService.delete(id);return Result.success();}
2、service接口业务层。
/*** 用于删除文章分类* @param id*/void delete(Integer id);
3、serviceImpl实现类。
@Overridepublic void delete(Integer id) {//从ThreadLocal里面拿到idMap<String, Object> map = ThreadLocalUtil.get();//得到当前用户登录的idInteger userId = (Integer) map.get("id");//传入用户的idcategoryMapper.delete(userId, id);}
4、mapper层。
/*** 用于删除文章分类* @param userId* @param id*/@Delete("delete from category where id = #{id} and create_user = #{userId}")void delete(Integer userId, Integer id);
5、后端接口测试。(postman)
  • 数据库表测试前状态。

  • 执行删除文章分类"美食"操作。

  • 删除成功!

二、获取文章详细功能。

(1)接口文档。
1、请求方式、请求路径、请求参数。
  • 方式:GET请求。
  • 路径:/article/detail。
  • 请求参数格式:queryString。
  • 请求参数:必须传,且是指定该文章的id。


2、响应数据。
  • 响应数据:code(必须)、message、data(必须)。


  • 响应数据示例。


(2)实现思路与代码书写。
1、controller层。
  • 方法名:detail()。
  • 方法上:使用注解@GetMapping("/article/detail")
  • 方法参数:使用@NotNull注解。
  • 方法内部调用service层方法。
/*** 根据ID获取文章详细信息* @param id* @return*/@GetMapping("/detail")public Result<Article> detail(Integer id){Article article = articleService.findById(id);return Result.success(article);}
2、service层接口业务层。
/*** 根据id查询文章详情* @param id* @return*/Article findById(Integer id);
3、serviceImpl实现类。
@Overridepublic Article findById(Integer id) {//从ThreadLocal里面拿到idMap<String, Object> map = ThreadLocalUtil.get();//得到当前用户登录的idInteger userId = (Integer) map.get("id");//根据当前登录用户的id和文章id查询文章return articleMapper.findById(id, userId);}
4、mapper层。
@Select("select * from article where id = #{id} and create_user = #{userId}")
Article findById(Integer id, Integer userId);
5、后端接口测试。(postman)
  • 数据库表数据。


  • 日期未格式化!


  • 注意对象序列化(对象——>JSON格式数据)日期需要变成指定格式!


  • Article实体类属性上添加注解。


  • 重新启动工程。日期格式化。

三、更新文章详细功能。

(1)接口文档。
1、请求路径、请求方式。
  • 请求路径:/article。
  • 请求方式:PUT请求


2、请求参数。
  • 参数格式:JOSN格式对象。
  • 参数样例。


3、响应数据。
  • 响应数据:code(状态码:必须!)


(2)实现思路与代码书写。
1、Article实体类。(分组校验)
  • 需要进行分组校验。因为新增文章对于id(不是必须的)。
  • 添加分组。

  • 指定校验分组。

  • 添加对应属性的校验归属。


2、controller层。
  • 使用注解@Validated(???)——指定校验分组。
@PutMappingpublic Result update(@RequestBody @Validated(Article.Update.class) Article article){articleService.update(article);return Result.success();}
3、service业务接口层。
/*** 用于更新文章详细* @param article*/void update(Article article);
4、serviceImpl层。
@Overridepublic void update(Article article) {//设置更新时间article.setUpdateTime(LocalDateTime.now());articleMapper.update(article);}
5、mapper层。
@Update("update article set title = #{title},content = #{content}, cover_img = #{coverImg},state = #{state},category_id = #{categoryId}, update_time = #{updateTime} where id = #{id} ")
void update(Article article);
6、后端接口测试。(postman工具)
  • 数据库当前数据。


  • 执行更新操作。


  • 更新后数据库数据。


  • 新增文章。(没有传id)

  • 新增后数据库数据。

  • 测试其它数据校验。

四、删除文章功能。

(1)接口文档。
1、请求方式、请求路径、请求参数。
  • 请求方式:DELETE请求。
  • 请求路径:/article。
  • 请求参数:queryString请求参数格式。
  • 参数说明:id必须传值。使用注解。


2、响应数据。


(2)实现思路与代码书写。
1、controller层。
/*** 用于根据ID删除文章详细* @param id* @return*/@DeleteMappingpublic Result delete(@NotNull Integer id){articleService.delete(id);return Result.success();}
2、service业务接口层。
/*** 根据id删除文章* @param id*/void delete(Integer id);
3、serviceImpl实现类。
@Overridepublic void delete(Integer id) {//从ThreadLocal里面拿到idMap<String, Object> map = ThreadLocalUtil.get();//得到当前用户登录的idInteger userId = (Integer) map.get("id");//传入用户的idarticleMapper.delete(userId, id);}
4、mapper层。
@Delete("delete from article where id = #{id} and create_user = #{userId}")
void delete(Integer userId, Integer id);
}
5、后端接口测试。(postman工具)
  • 数据库当前数据。


  • 测试删除id=6的文章。


  • 操作成功后数据。

相关文章:

springboot(20)(删除文章分类。获取、更新、删除文章详细)(Validation分组校验)

目录 一、删除文章分类功能。 &#xff08;1&#xff09;接口文档。 1、请求路径、请求参数。 2、请求参数。 3、响应数据。 &#xff08;2&#xff09;实现思路与代码书写。 1、controller层。 2、service接口业务层。 3、serviceImpl实现类。 4、mapper层。 5、后端接口测试。…...

英语系统语法书面记载:高级语法 8 的状语从句

在英语高级语法中&#xff0c;状语从句是一种用来修饰动词、形容词、副词或整个句子的从句&#xff0c;它提供有关时间、地点、原因、条件、方式、让步等信息。状语从句通常由特定的连词引导。以下是常见的几种状语从句类型及其用法&#xff1a; 1. 时间状语从句 (Adverbial Cl…...

C语言:深入理解指针(1)

一.内存和地址 在讲内存和地址之前&#xff0c;我们想有个生活中的案例&#xff1a; 假设有一栋宿舍楼&#xff0c;把你放在楼里&#xff0c;楼上有100个房间&#xff0c;但是房间没有编号&#xff0c;你的一个朋友来找你玩&#xff0c;如果想找到你&#xff0c;就得挨个房子去…...

priority_queue--优先队列

一、认识优先队列 priority_queue&#xff08;优先队列&#xff09;是 C 标准模板库&#xff08;STL&#xff09;中的一个容器适配器。它的底层实现通常是用堆&#xff08;一般是二叉堆&#xff09;来实现的。优先队列中的元素按照一定的优先级顺序进行排列&#xff0c;在队首的…...

Paper -- 建筑物高度估计 -- 基于深度学习、图像处理和自动地理空间分析的街景图像建筑高度估算

论文题目: Building height estimation from street-view imagery using deep learning, image processing and automated geospatial analysis 中文题目: 基于深度学习、图像处理和自动地理空间分析的街景图像建筑高度估算 作者: Ala’a Al-Habashna, Ryan Murdoch 作者单位: …...

开发一套ERP 第八弹 RUst 插入数据

更全面的报错,方便检查错误在哪里,现代高级语言越来越智能 还是得看下原文档怎么操作的 src 目录为crate 的根目录 想在crate 中模块相互引入需要在 main 中声明,各个模块,然后才能在各个模块中相互引入和使用 原始工程引入,避免直接使用 lib.rs 回合cargo 中的一些 工程管理出…...

回退用 git revert 还是 git reset?

git revert 会生成一个新的 commit 来记录此次操作&#xff1b;git reset 是把 HEAD 指针向前挪动一次&#xff0c;会减少一个 commit。 回退用 git revert 回退还是用 git reset&#xff0c;核心就一点&#xff1a; 是否需要记录这次回退。 如果需要记录这次回退&#xff0c…...

【docker】多阶段构建与基础构建,及企业案例展示

基础构建与多阶段构建对比 基础构建&#xff08;单阶段构建&#xff09; 在基础构建中&#xff0c;所有构建过程和最终的应用程序都在同一个镜像中进行&#xff0c;构建工具和最终应用程序都会在最终镜像中。 这样构建镜像时会包含所有的构建工具和依赖&#xff0c;因此最终镜…...

基于链表的基础笔试/面试题

1. 反转链表 问题描述&#xff1a;反转一个单向链表。 示例&#xff1a; 输入&#xff1a;1 → 2 → 3 → 4 → 5 输出&#xff1a;5 → 4 → 3 → 2 → 1 class ListNode {int val;ListNode next;ListNode(int x) {val x;} }public class LinkedList {public ListNode …...

SARIMA 模型Matlab代码

% 导入数据 data readtable(data.xlsx); % 假设数据在第一列 y data{:, 1}; % 获取第一列数据% 划分训练集和测试集&#xff0c;80% 训练&#xff0c;20% 测试 trainSize floor(0.8 * length(y)); trainData y(1:trainSize); testData y(trainSize1:end);% 创建时间序列…...

第八课 Unity编辑器创建的资源优化_特效篇(Particle System)详解

无论是CPU还是GPU&#xff0c;粒子系统对其的影响面都是不容小觑的。随着项目的重度化和3A化&#xff0c;玩家的口味变挑剔了、游戏玩法复杂度变高了、画面的特效表现变复杂了......所以我们还是更加谨慎地对待粒子系统。 特效&#xff08;Particle System&#xff09; 游戏效…...

Oracle对比表与表之间的结构

自己首先想到的就是,navicat有提供结构同步 但是有些时候情况不一样,比如我遇到的是连接不同,而且是互相同步,以最多的列的那个表为样 没有说一个固定的源 那么还可以通过导出表结构去另一个库中执行看是否报错,以此来判断结构的不同 但是我感觉有点儿麻烦 最后想到通过sql语…...

基于JSP+MySQL的网上招聘系统的设计与实现

摘要 在这样一个经济飞速发展的时代&#xff0c;人们的生存与生活问题已成为当代社会需要关注的一个焦点。对于一个刚刚 踏入社会的年轻人来说&#xff0c;他对就业市场和形势了解的不够详细&#xff0c;同时对自己的职业规划也很模糊&#xff0c;这就导致大量的 时间被花费在…...

【Linux】进程地址空间(虚拟地址vs物理地址vs页表)

Linux 进程概念补充【Linux】 进程是什么&#xff08;不熟悉的兄弟可以看看&#xff09;。 1. C/C内存分布图 对于有c/c基础的同学相信对上面的图片并不陌生&#xff0c;实际上其描述的并不是正真的物理内存&#xff0c;而是虚拟内存&#xff0c;我们把它叫做进程地址空间 。 2…...

pytorch 融合 fuse 学习笔记

目录 fuse_lora 作用是什么 fuse_modules源码解读 fuse_lora 作用是什么 在深度学习模型微调场景下&#xff08;与 LoRA 相关&#xff09; 参数融合功能 在使用 LoRA&#xff08;Low - Rank Adaptation&#xff09;对预训练模型进行微调后&#xff0c;fuse_lora函数的主要作…...

在 Ubuntu 20.04 上使用 Lux 下载 Bilibili 视频的详细教程

在 Ubuntu 20.04 上使用 Lux 下载 Bilibili 视频的详细教程 在 Ubuntu 20.04 上使用 Lux 下载 Bilibili&#xff08;哔哩哔哩&#xff09;视频的完整和详细步骤如下&#xff0c;包括使用预编译二进制文件的安装方法&#xff1a; 1. 安装依赖 确保你的系统已安装 FFmpeg&…...

【eclipse】快捷键

【eclipse】快捷键 编辑导航重构调试复制其他快速生成 Eclipse 提供了丰富的快捷键来帮助开发者提高工作效率。 以下是一些常用的 Eclipse 快捷键&#xff0c;它们覆盖了编辑、导航、重构、调试等多个方面。 这些快捷键能够显著提升开发效率&#xff0c;尤其是在处理大型项目时…...

集成开发环境(IDE)的使用技巧插件配置

在开发过程中&#xff0c;集成开发环境&#xff08;IDE&#xff09;的使用技巧和插件配置对提高工作效率、优化代码质量和加速调试至关重要。 一、IDE使用技巧 1. 代码导航 跳转到定义&#xff08;Go to Definition&#xff09;&#xff1a;快速跳转到函数、类或变量的定义位…...

【如何提升代码工程质量】code review篇

应该对于基本上所有软件相关的公司来说&#xff0c;都有committer机制&#xff0c;即代码写好之后会提交合并请求&#xff0c;待相关人员code review通过后再进行合入&#xff0c;所以code review就是代码合入代码仓库的最后一道关卡&#xff0c;对于代码质量的影响也是不容忽视…...

Qt 面试题学习13_2024-12-1

Qt 面试题 1、 QString与基本数据类型如何转换?2、常用数据结构3、进程之间的道信方式有哪些? 1、 QString与基本数据类型如何转换? 1、将QString转换为基本数据类型通过QString的各种转换函数&#xff0c;可以将QString转换为int、float、double等基本数据类型。 QStri…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...