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
     */
    @DeleteMapping
    public 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实现类。
@Override
    public void delete(Integer id) {
        //从ThreadLocal里面拿到id
        Map<String, Object> map = ThreadLocalUtil.get();
        //得到当前用户登录的id
        Integer userId = (Integer) map.get("id");
        //传入用户的id
        categoryMapper.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实现类。
@Override
    public Article findById(Integer id) {
        //从ThreadLocal里面拿到id
        Map<String, Object> map = ThreadLocalUtil.get();
        //得到当前用户登录的id
        Integer 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(???)——指定校验分组。
@PutMapping
    public 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层。
@Override
    public 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
     */
    @DeleteMapping
    public Result delete(@NotNull Integer id){
        articleService.delete(id);
        return Result.success();
    }
2、service业务接口层。
/**
     * 根据id删除文章
     * @param id
     */
    void delete(Integer id);
3、serviceImpl实现类。
@Override
    public void delete(Integer id) {
        //从ThreadLocal里面拿到id
        Map<String, Object> map = ThreadLocalUtil.get();
        //得到当前用户登录的id
        Integer userId = (Integer) map.get("id");
        //传入用户的id
        articleMapper.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的文章。


  • 操作成功后数据。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何搭建JMeter分布式集群环境来进行性能测试

在性能测试中&#xff0c;当面对海量用户请求的压力测试时&#xff0c;单机模式的JMeter往往力不从心。如何通过分布式集群环境&#xff0c;充分发挥JMeter的性能测试能力&#xff1f;这正是许多测试工程师在面临高并发、海量数据时最关注的问题。那么&#xff0c;如何轻松搭建…

Y20030025基于php+mysql的幼儿健康管理系统设计与实现 源代码 配置 文档

幼儿健康管理系统的设计与实现 1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取 1.摘要 在信息化时代的浪潮中&#xff0c;幼儿健康管理面临着前所未有的挑战与机遇。为了更好地满足家长和幼儿园对幼儿健康管理的需求&#xff0c;我们致力于开发一套基于PHP的幼…

时频转换 | Matlab基于垂直二阶同步压缩变换vertical second-order synchrosqueezing一维数据转二维图像方法

目录 基本介绍程序设计参考资料获取方式基本介绍 时频转换 | Matlab基于垂直二阶同步压缩变换vertical second-order synchrosqueezing一维数据转二维图像方法 程序设计 clear clc % close all load x.mat % 导入数据 x

1.1 数据结构的基本概念

1.1.1 基本概念和术语 一、数据、数据对象、数据元素和数据项的概念和关系 数据&#xff1a;是客观事物的符号表示&#xff0c;是所有能输入到计算机中并被计算机程序处理的符号的总称。 数据是计算机程序加工的原料。 数据对象&#xff1a;是具有相同性质的数据元素的集合&…

SpringBoot小知识(2):日志

日志是开发项目中非常重要的一个环节&#xff0c;它是程序员在检查程序运行的手段之一。 1.日志的基础操作 1.1 日志的作用 编程期调试代码运营期记录信息&#xff1a; * 记录日常运营重要信息(峰值流量、平均响应时长……) * 记录应用报错信息(错误堆栈) * 记录运维过程数据(…

传输控制协议(TCP)

传输控制协议是Internet一个重要的传输层协议。TCP提供面向连接、可靠、有序、字节流传输服务。 1、TCP报文段结构 注&#xff1a;TCP默认采用累积确认机制。 2、三次握手、四次挥手 &#xff08;1&#xff09;当客户向服务器发送完最后一个数据段后&#xff0c;发送一个FIN段…

输出保留3位小数的浮点数

输出保留3位小数的浮点数 C语言代码C代码Java代码Python代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 读入一个单精度浮点数&#xff0c;保留3位小数输出这个浮点数。 输入 只有一行&#xff0c;一个单精度浮点数。 输出 也只有一…

安装 RabbitMQ 服务

安装 RabbitMQ 服务 一. RabbitMQ 需要依赖 Erlang/OTP 环境 (1) 先去 RabbitMQ 官网&#xff0c;查看 RabbitMQ 需要的 Erlang 支持&#xff1a;https://www.rabbitmq.com/ 进入官网&#xff0c;在 Docs -> Install and Upgrade -> Erlang Version Requirements (2) …

【竞技宝】CS2-上海major:MongoLZ成为亚洲之光

北京时间2024年12月1日,上海major在昨日正式拉开比赛序幕,首日第六轮迎来MongolZ对阵MIBR、COL对阵PUA。以下是本轮比赛的详细战报。 MongoLz 13-6 MIBR(比赛地图:远古遗迹) 上半场,MongoLz先做进攻方。手枪局,MongoLz抱团进攻遭遇MIBR重防被接连秒掉三人,然而在5V2的残局中,M…

【绘图】数据可视化(python)

对于数据绝对值差异较大&#xff08;数据离散&#xff09; 1. 对数坐标直方图&#xff08;Histogram with Log Scale&#xff09; import pandas as pd import matplotlib.pyplot as plt import numpy as np# 示例数据 data {count: [10, 20, 55, 90, 15, 5, 45, 80, 1000, …

MySQL - Why Do We Need a Thread Pool? - mysql8.0

MySQL - Why Do We Need a Thread Pool? - mysql8.0 本文主要由于上次写的感觉又长又臭&#xff0c; 感觉学习方法有问题&#xff0c; 我们这次直接找来了 thread pool 的原文&#xff0c;一起来看看官方的开发者给出的blog – 感觉是个大神 但是好像不是最官方的 &#xff0c…

【JS】栈内存、堆内存、事件机制区别

js中&#xff0c;内存主要分为两种类型&#xff1a;栈内存&#xff08;stack&#xff09;、堆内存&#xff08;heap&#xff09;&#xff0c;两种内存区域在存储和管理数据时有各自的特点和用途。 栈内存 访问顺序 栈是先进后出、后进先出的数据结构&#xff0c;栈内存是内存用…

glog在vs2022 hello world中使用

准备工作 设置dns为阿里云dns 223.5.5.5&#xff0c;下载cmake&#xff0c;vs2022&#xff0c;git git clone https://github.com/google/glog.git cd glog mkdir build cd build cmake .. 拷贝文件 新建hello world并设置 设置预处理器增加GLOG_USE_GLOG_EXPORT;GLOG_NO_AB…

20241127 给typecho文章编辑附件 添加视频 图片预览

Typecho在写文章时&#xff0c;如果一次性上传太多张图片可能分不清哪张&#xff0c;因为附件没有略缩图&#xff0c;无法实时阅览图片&#xff0c;给文章插入图片时很不方便。 编辑admin/file-upload.php 大约十八行的位置 一个while 循环里面,这是在进行html元素更新操作,在合…

重生之我在异世界学编程之C语言:二维数组篇

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文一 二维数组的创建1. 二维数组的…

Tree搜索二叉树、map和set_数据结构

数据结构专栏 如烟花般绚烂却又稍纵即逝的个人主页 本章讲述数据结构中搜索二叉树与HashMap的学习&#xff0c;感谢大家的支持&#xff01;欢迎大家踊跃评论&#xff0c;感谢大佬们的支持! 目录 搜索二叉树的概念二叉树搜索模拟实现搜索二叉树查找搜索二叉树插入搜索二叉树删除…

分离整数的各个数

分离整数的各个数 C语言代码C 语言代码Java语言代码Python语言代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 给定一个整数&#xff0c;要求从个位开始分离出它的每一位数字。 输入 输入一个整数&#xff0c;整数在1到100000000之间…

OpenAI Whisper 语音识别 模型部署及接口封装

环境配置: 一、安装依赖&#xff1a; pip install -U openai-whisper 或者&#xff0c;以下命令会从这个存储库拉取并安装最新的提交&#xff0c;以及其Python依赖项&#xff1a; pip install githttps://github.com/openai/whisper.git 二、安装ffmpeg&#xff1a; cd …

PotPlayer 最新版本支持使用 Whisper 自动识别语音生成字幕

PotPlayer 最新版本支持使用 Whisper 自动识别语音生成字幕 设置使用下载地址 设置 使用 下载地址 https://www.videohelp.com/software/PotPlayer

第33周:运动鞋识别(Tensorflow实战第五周)

目录 前言 一、前期工作 1.1 设置GPU 1.2 导入数据 1.3 查看数据 二、数据预处理 2.1 加载数据 2.2 可视化数据 2.3 再次检查数据 2.4 配置数据集 2.4.1 基本概念介绍 2.4.2 代码完成 三、构建CNN网络 四、训练模型 4.1 设置动态学习率 4.2 早停与保存最佳模型…