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分组校验)
目录 一、删除文章分类功能。 (1)接口文档。 1、请求路径、请求参数。 2、请求参数。 3、响应数据。 (2)实现思路与代码书写。 1、controller层。 2、service接口业务层。 3、serviceImpl实现类。 4、mapper层。 5、后端接口测试。…...
英语系统语法书面记载:高级语法 8 的状语从句
在英语高级语法中,状语从句是一种用来修饰动词、形容词、副词或整个句子的从句,它提供有关时间、地点、原因、条件、方式、让步等信息。状语从句通常由特定的连词引导。以下是常见的几种状语从句类型及其用法: 1. 时间状语从句 (Adverbial Cl…...

C语言:深入理解指针(1)
一.内存和地址 在讲内存和地址之前,我们想有个生活中的案例: 假设有一栋宿舍楼,把你放在楼里,楼上有100个房间,但是房间没有编号,你的一个朋友来找你玩,如果想找到你,就得挨个房子去…...
priority_queue--优先队列
一、认识优先队列 priority_queue(优先队列)是 C 标准模板库(STL)中的一个容器适配器。它的底层实现通常是用堆(一般是二叉堆)来实现的。优先队列中的元素按照一定的优先级顺序进行排列,在队首的…...

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 来记录此次操作;git reset 是把 HEAD 指针向前挪动一次,会减少一个 commit。 回退用 git revert 回退还是用 git reset,核心就一点: 是否需要记录这次回退。 如果需要记录这次回退,…...
【docker】多阶段构建与基础构建,及企业案例展示
基础构建与多阶段构建对比 基础构建(单阶段构建) 在基础构建中,所有构建过程和最终的应用程序都在同一个镜像中进行,构建工具和最终应用程序都会在最终镜像中。 这样构建镜像时会包含所有的构建工具和依赖,因此最终镜…...
基于链表的基础笔试/面试题
1. 反转链表 问题描述:反转一个单向链表。 示例: 输入:1 → 2 → 3 → 4 → 5 输出: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}; % 获取第一列数据% 划分训练集和测试集,80% 训练,20% 测试 trainSize floor(0.8 * length(y)); trainData y(1:trainSize); testData y(trainSize1:end);% 创建时间序列…...

第八课 Unity编辑器创建的资源优化_特效篇(Particle System)详解
无论是CPU还是GPU,粒子系统对其的影响面都是不容小觑的。随着项目的重度化和3A化,玩家的口味变挑剔了、游戏玩法复杂度变高了、画面的特效表现变复杂了......所以我们还是更加谨慎地对待粒子系统。 特效(Particle System) 游戏效…...

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

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

【Linux】进程地址空间(虚拟地址vs物理地址vs页表)
Linux 进程概念补充【Linux】 进程是什么(不熟悉的兄弟可以看看)。 1. C/C内存分布图 对于有c/c基础的同学相信对上面的图片并不陌生,实际上其描述的并不是正真的物理内存,而是虚拟内存,我们把它叫做进程地址空间 。 2…...
pytorch 融合 fuse 学习笔记
目录 fuse_lora 作用是什么 fuse_modules源码解读 fuse_lora 作用是什么 在深度学习模型微调场景下(与 LoRA 相关) 参数融合功能 在使用 LoRA(Low - Rank Adaptation)对预训练模型进行微调后,fuse_lora函数的主要作…...
在 Ubuntu 20.04 上使用 Lux 下载 Bilibili 视频的详细教程
在 Ubuntu 20.04 上使用 Lux 下载 Bilibili 视频的详细教程 在 Ubuntu 20.04 上使用 Lux 下载 Bilibili(哔哩哔哩)视频的完整和详细步骤如下,包括使用预编译二进制文件的安装方法: 1. 安装依赖 确保你的系统已安装 FFmpeg&…...
【eclipse】快捷键
【eclipse】快捷键 编辑导航重构调试复制其他快速生成 Eclipse 提供了丰富的快捷键来帮助开发者提高工作效率。 以下是一些常用的 Eclipse 快捷键,它们覆盖了编辑、导航、重构、调试等多个方面。 这些快捷键能够显著提升开发效率,尤其是在处理大型项目时…...
集成开发环境(IDE)的使用技巧插件配置
在开发过程中,集成开发环境(IDE)的使用技巧和插件配置对提高工作效率、优化代码质量和加速调试至关重要。 一、IDE使用技巧 1. 代码导航 跳转到定义(Go to Definition):快速跳转到函数、类或变量的定义位…...
【如何提升代码工程质量】code review篇
应该对于基本上所有软件相关的公司来说,都有committer机制,即代码写好之后会提交合并请求,待相关人员code review通过后再进行合入,所以code review就是代码合入代码仓库的最后一道关卡,对于代码质量的影响也是不容忽视…...
Qt 面试题学习13_2024-12-1
Qt 面试题 1、 QString与基本数据类型如何转换?2、常用数据结构3、进程之间的道信方式有哪些? 1、 QString与基本数据类型如何转换? 1、将QString转换为基本数据类型通过QString的各种转换函数,可以将QString转换为int、float、double等基本数据类型。 QStri…...

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...

车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...

华为云Flexus+DeepSeek征文 | MaaS平台避坑指南:DeepSeek商用服务开通与成本控制
作者简介 我是摘星,一名专注于云计算和AI技术的开发者。本次通过华为云MaaS平台体验DeepSeek系列模型,将实际使用经验分享给大家,希望能帮助开发者快速掌握华为云AI服务的核心能力。 目录 作者简介 前言 一、技术架构概览 1.1 整体架构设…...