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的文章。


  • 操作成功后数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/62747.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【前端】特殊案例分析深入理解 JavaScript 中的词法作用域

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 &#x1f4af;前言&#x1f4af;案例代码&#x1f4af;词法作用域&#xff08;Lexical Scope&#xff09;与静态作用域什么是词法作用域&#xff1f;代码执行的详细分析 &#x1f4af;函数定义与调用的…

Node.js 实战: 爬取百度新闻并序列化 - 完整教程

很多时候我们需要爬取一些公开的网页内容来做一些数据分析和统计。而多数时候&#xff0c;大家会用到python &#xff0c;因为实现起来很方便。但是其实Node.js 用来爬取网络内容&#xff0c;也是非常强大的。 今天我向大家介绍一下我自己写的一个百度新闻的爬虫&#xff0c;可…

三分钟快速掌握——Linux【vim】的使用及操作方法

一、vim的使用 vim是一个文本编辑器 非常小巧轻便 1.1如何进入vim编辑器 方法一&#xff1a; 首先使用touch 1.c 创建一个源文件 然后使用vim 1.c进入 方法二&#xff1a; 直接使用指令 vim 2.c 会直接创建一个2.c的源文件 退出时记得保存&#xff08;使用wq或者x&am…

(简单5步实现)部署本地AI大语言模型聊天系统:Chatbox AI + grok2.0大模型

摘要&#xff1a; 本文将指导您如何部署一个本地AI大语言模型聊天系统&#xff0c;使用Chatbox AI客户端应用和grok-beta大模型&#xff0c;以实现高效、智能的聊天体验。 引言&#xff1a; 由马斯克X-AI发布的Grok 2大模型以其卓越的性能超越了GPT4.0。Grok模型支持超长文本…

docker安装hadoop环境

一、使用docker搭建基础镜像 1、拉取centos系统镜像 # 我这里使用centos7为例子 docker pull centos:7 2、创建一个dockerfiler文件&#xff0c;用来构建自定义一个有ssh功能的centos镜像 # 基础镜像 FROM centos:7 # 作者 #MAINTAINER hadoop ADD Centos-7.repo /etc/yum.re…

中国电信张宝玉:城市数据基础设施建设运营探索与实践

11月28日&#xff0c;2024新型智慧城市发展创新大会在山东青岛召开&#xff0c;中国电信数字政府研究院院长张宝玉在大会发表主旨演讲《城市数据基础设施运营探索与实践》。报告内容包括城市数据基础设施的概述、各地典型做法及发展趋势建议三个方面展开。 篇幅限制&#xff0…

Linux内核4.14版本——ccf时钟子系统(6)——DTS相关的API

目录 1. of_clk_add_provider 2. of_clk_get_from_provider 2.1 __of_clk_get_hw_from_provider 2.2 __clk_create_clk 3. of_clk_set_defaults 3.1 __set_clk_parents 3.2 __set_clk_rates 再回到第2章DTS相关的介绍&#xff0c;clock driver使用一个DTS node描述一个c…

2024年度桌面便签软件电脑版推荐

随着2024年的尾声渐近&#xff0c;这一年中涌现出了许多优秀的软件&#xff0c;其中便签软件因其便捷性和高效性成为了备受欢迎的工具。这类软件无论是在工作还是日常生活中&#xff0c;都极大地提升了我们的效率和生活质量。 在众多桌面便签中&#xff0c;敬业签是一款值得推…

WPS for Mac免登录使用工具栏

一、mac下载国际版https://www.wps.com 下载下来是在线安装包&#xff0c;对了&#xff0c;不再需要汉化&#xff01;&#xff01;&#xff01; 二、干掉登录 进入目录/Applications/wpsoffice.app/Contents/Frameworks/office6&#xff08;访达、应用程序、wpsoffice.app右…

【计算机网络】实验3:集线器和交换器的区别及交换器的自学习算法

实验 3&#xff1a;集线器和交换器的区别及交换器的自学习算法 一、 实验目的 加深对集线器和交换器的区别的理解。 了解交换器的自学习算法。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实验内容 1、熟悉集线器和交换器的区别 (1) 第一步&#xff1a;构建网络…

【技巧】Mac上如何显示键盘和鼠标操作

在制作视频教程时&#xff0c;将键盘和鼠标的操作在屏幕上显示出来&#xff0c;会帮助观众更容易地理解。 推荐Mac上两款开源的小软件。 1. KeyCastr 这款工具从2009年至今一直在更新中。 https://github.com/keycastr/keycastr 安装的话&#xff0c;可以从Github上下载最…

Docker:在 ubuntu 系统上生成和加载 Docker 镜像

本文将介绍在 ubuntu系统上进行 Docker 镜像的生成和加载方法和代码。 文章目录 一、下载和安装 docker二、加载 docker 文件三、保存你的镜像四、将镜像上传到云端并通过连接下载和加载 Docker 镜像五、Docker 容器和本地的文件交互5.1 从容器复制文件到本地宿主机5.1.1 单个文…

PHP爬虫性能优化:从多线程到连接池的实现

背景介绍 随着网络数据的爆炸式增长&#xff0c;爬虫技术成为数据获取的重要工具。从市场调研到用户行为分析&#xff0c;爬虫的应用无处不在。然而&#xff0c;在实际应用中&#xff0c;我们常常遇到爬虫性能不足的问题&#xff1a;单线程处理效率低下、请求超时、数据采集量…

《现代网络技术》读书笔记:网络虚拟化

本文部分内容来源于《现代网络技术&#xff1a;SDN,NFV,QoE、物联网和云计算&#xff1a;SDN,NFV,QoE,IoT,andcloud》 虚拟局域网 图9-1显示了一个比较常见的层次化局域网场景&#xff0c;在这个例子中&#xff0c;局域网中的设备分为四个部分&#xff0c;每个部分都通过以太网…

在c#控制台中使用Raylib-cs库,绘制控制小球和插入音频(附带c++中小球的控制代码)

下载网址 GitHub - chrisdill/raylib-cs: C# bindings for raylib, a simple and easy-to-use library to learn videogames programming 克隆库 克隆GitHub仓库-CSDN博客 1 .制作dll 点击 生成之后就会多出这些东西 2.在项目中添加dll 然后就导进来了 测试一下用例代码 …

「Mac畅玩鸿蒙与硬件40」UI互动应用篇17 - 照片墙布局

本篇将带你实现一个简单的照片墙布局应用&#xff0c;通过展示多张图片组成照片墙效果&#xff0c;用户可以点击图片查看其状态变化。 关键词 UI互动应用照片墙布局Grid 布局动态图片加载用户交互 一、功能说明 照片墙布局应用的特点&#xff1a; 动态加载多张图片组成网格布…

数字图像处理(12):灰度二值化

灰度像素&#xff1a;在 RGB 颜色模型下&#xff0c;图像中每个像素颜色的 R、G、B 三种基色的分量值相等的像素。由灰度像素组成的灰度图像只能表现256中颜色&#xff08;或亮度&#xff09;&#xff0c;通常把灰度图像中像素的亮度称为灰度值。灰度化处理&#xff1a;是指把彩…

华为新手机和支付宝碰一下 带来更便捷支付体验

支付正在变的更简单。 11月26日&#xff0c;华为新品发布会引起众多关注。发布会上&#xff0c;华为常务董事余承东专门提到&#xff0c;华为Mate 70和Mate X6折叠屏手机的“独门支付秘技”——“碰一下”&#xff0c;并且表示经过华为和支付宝的共同优化&#xff0c;使用“碰…

Redis开发05:使用stackexchange.redis库对redis进行增删改查

一、安装第三方库 二、官网 StackExchange.Redis |通用型 redis 客户端 三、连接示例 private static string redisConnectionString "localhost:6379,passwordyourpassword,defaultDatabase0,allowAdmintrue,asyncTimeout10000";private static string redisConn…

Electron + vue3 打包之后不能跳转路由

路由不跳转问题原因&#xff1a; 是因为electron需要将vue-router的mode调整为hash模式(两种写法) export default new Router({mode: hash, //这里history修改为hashscrollBehavior: () > ({y: 0}),routes: constantRouterMap, }) export default new createRouter({his…