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

news2024/11/29 21:26:58

目录

一、删除文章分类功能。

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


  • 操作成功后数据。

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

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

相关文章

现代化水库可视化管理平台:提升水库运行效率与安全保障

随着科技的飞速发展&#xff0c;现代化水利管理逐渐依赖于数字化、智能化手段。作为水利基础设施的重要组成部分&#xff0c;水库的管理不仅关乎水资源的合理利用&#xff0c;还关系到防洪、灌溉、供水等多项社会功能的实现。为了提升水库的管理水平&#xff0c;确保其运行安全…

【05】Selenium+Python 两种文件上传方式(AutoIt)

上传文件的两种方式 一、input标签上传文件 可以用send_keys方法直接上传文件 示例代码 input标签上传文件import time from selenium import webdriver from chromedriver_py import binary_path # this will get you the path variable from selenium.webdriver.common.by i…

【论文笔记】Number it: Temporal Grounding Videos like Flipping Manga

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: Number it: Temporal Grou…

软件/游戏提示:mfc42u.dll没有被指定在windows上运行如何解决?多种有效解决方法汇总分享

遇到“mfc42u.dll 没有被指定在 Windows 上运行”的错误提示&#xff0c;通常是因为系统缺少必要的运行库文件或文件损坏。以下是多种有效的解决方法&#xff0c;可以帮助你解决这个问题&#xff1a; 原因分析 出现这个错误的原因是Windows无法找到或加载MFC42u.dll文件。这可…

网络地址转换

NAT概述 解决公有地址不足&#xff0c;并且分配不均匀的问题 公有地址&#xff1a;由专门的机构管理、分配&#xff0c;可以在因特网上直接通信 私有地址&#xff1a;组织和个人可以任意使用&#xff0c;只能在内网使用的IP地址 A、B、C类地址中各预留了一些私有IP地址 A&…

机器学习-神经网络(BP神经网络前向和反向传播推导)

1.1 神经元模型 神经网络(neural networks)方面的研究很早就已出现,今天“神经网络”已是一个相当大的、多学科交叉的学科领域.各相关学科对神经网络的定义多种多样,本书采用目前使用得最广泛的一种,即“神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够…

uniapp组建scroll-view初始化页面设置scrollTop无效解决办法

官方文档&#xff1a;scroll-view | uni-app官网 一 . scroll-view的基本用法 使用竖向滚动时&#xff0c;需要给 <scroll-view> 一个固定高度&#xff0c;通过 css 设置 height&#xff1b; <scroll-view :scroll-top"scrollTop" scroll-y"true&quo…

Web day02 Js Vue Ajax

目录 1.javascript: 1.js的引入方式&#xff1a; 2.js变量 & 数据类型 & 输出语句&#xff1a; 模板字符串&#xff1a; 3.函数 & 自定义对象&#xff1a; 4. json 字符串 & DOM操作&#xff1a; 5. js事件监听&#xff1a; 6.js的模块化导入或者导出&a…

【面向对象的程序设计——集合框架】主要接口

文章目录 主要接口集合框架的主要接口Collect接口Set接口实现Set接口的类SortedSet接口 List接口&#xff1a;线性表实现List接口的类&#xff1a; Queue接口实现Queue接口的类 Map接口Map接口的定义Map接口的方法SortedMap接口 主要接口 集合框架的主要接口 声明了对各种集合…

工业物联网网关在设备接入物联网中的核心作用

一、工业物联网网关的定义与功能 工业物联网网关是工业领域中的一种重要设备&#xff0c;它位于工业物联网系统的边缘位置&#xff0c;负责连接、管理和协调工业设备与云平台之间的通信。作为边缘计算的关键组件&#xff0c;工业物联网网关能够实现工业设备、传感器、PLC、DCS…

2024年第十三届”认证杯“数学中国数学建模国际赛(小美赛)

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

selinux和防火墙实验

1 、 selinux 的说明 SELinux 是 Security-Enhanced Linux 的缩写&#xff0c;意思是安全强化的 linux 。 SELinux 主要由美国国家安全局&#xff08; NSA &#xff09;开发&#xff0c;当初开发的目的是为了避免资源的误用。 系统资源都是通过程序进行访问的&#xff0c;如…

flink学习(12)——checkPoint

如何设置checkPoint package com.bigdata.day06;/** * 1、需要三句话 * 2、设置完checkPoint后若程序出现异常&#xff0c;会一直重启 * 3、此时是自动进行checkPoint保存 * 4、注意&#xff1a;此时如果有checkpoint ,是不会出现异常的&#xff0c;需要将checkpoint的代码关…

前端面试题-1(详解事件循环)

1.了解浏览器的进程模型 1.什么是进程&#xff1f; 程序运行需要有它自己专属的内存空间&#xff0c;可以把这块内存空间简单的理解为进程 每个应用至少有一个进程&#xff0c;进程之间相互独立&#xff0c;即使要通信&#xff0c;也需要双方同意。 2.什么是线程&#xff1f…

http的文件上传和下载原理

目录 一&#xff1a;上传 1&#xff1a;http请求格式 2&#xff1a;文件上传类型分析 1&#xff1a;md5秒传 2&#xff1a;分片上传 1. 什么是分片上传 2. 分片上传的场景 3&#xff1a;断点续传 1. 什么是断点续传 2. 应用场景 3. 实现断点续传的核心逻辑 4. 实现流…

【计算机视觉】图像基本操作

1. 数字图像表示 一幅尺寸为MN的图像可以用矩阵表示&#xff0c;每个矩阵元素代表一个像素&#xff0c;元素的值代表这个位置图像的亮度&#xff1b;其中&#xff0c;彩色图像使用3维矩阵MN3表示&#xff1b;对于图像显示来说&#xff0c;一般使用无符号8位整数来表示图像亮度&…

VSCode 下载 安装

VSCode【下载】【安装】【汉化】【配置C环境&#xff08;超快&#xff09;】&#xff08;Windows环境&#xff09;-CSDN博客 Download Visual Studio Code - Mac, Linux, Windowshttps://code.visualstudio.com/Downloadhttps://code.visualstudio.com/Download 注意&#xff0…

【Python入门】Python数据类型

文章一览 前言一、变量1.1.如何使用变量1.2.如何定义变量的名字&#xff08;标识符&#xff09; 二、数据类型2.1 整型数据2.2 浮点型数据2.3 布尔型&#xff08;bool&#xff09;数据2.4 复数型数据2.5 字符串类型1 > 字符串相加&#xff08;合并&#xff09;&#xff08;&…

算法基础 - 高斯牛顿法(曲线拟合)

文章目录 1. 高斯牛顿法发展历程2、问题的引出3、高斯牛顿法的前世3.1、一阶&#xff0c;二阶梯度法共有原理3.2、最速下降法&#xff08;一阶梯度法&#xff09;3.3、牛顿法&#xff08;二阶梯度法&#xff09; 4、高斯牛顿法4.1 高斯牛顿法的思想4.2 最小二乘问题4.3 高斯牛顿…

Vue+Element Plus实现自定义表单弹窗

目录 一、基本框架 1.父组件index.vue 2.子组件FormPop.vue 二、细节补充 1&#xff09;input、textarea、select、input number 2&#xff09;daterange、date、monthrange 3&#xff09;数据定义 4&#xff09;没改样式的效果 5&#xff09;最终效果 三、最终代码 …