springboot3项目练习详细步骤(第二部分:文章分类模块)

 

新增文章分类

接口文档

业务实现

参数校验

文章分类列表

接口文档

业务实现 

获取文章分类详情

接口文档 

业务实现

更新文章分类

接口文档 

业务实现

分组校验

问题

概念 

实现步骤

总结

删除文章分类

接口文档

业务实现 


该模块大部分请求的路径相同,接口功能区分方式按请求方式不同而进行区分 

文章分类业务表结构

 新增文章分类

 接口文档

 业务实现

 创建CategoryController控制类并编写实现方法

@RestController //定义为控制类
@RequestMapping("/category") //设置请求映射路径
public class CategoryController {@Autowiredprivate CategoryService categoryService; //注入CategoryService@PostMappingpublic Result add(@RequestBody Category category){categoryService.add(category);return Result.success();}
}

 创建CategoryService接口并添加抽象方法

void add(Category category);

创建CategoryServiceimpl接口实现类

@Service
public class CategoryServiceimpl implements CategoryService {@Autowiredprivate CategoryMapper categoryMapper; //注入CategoryMapper接口@Overridepublic void add(Category category) {//补充添加id属性值Map<String,Object> map = ThreadLocalUtil.get();Integer id = (Integer) map.get("id");category.setCreateUser(id);categoryMapper.add(category);Result.success();}
}

 创建CategoryMapper接口用于操作mybatis

@Mapper
public interface CategoryMapper {//新增@Insert("insert into category(category_name,category_alias,create_user,create_time,update_time)" +"values(#{categoryName},#{categoryAlias},#{createUser},now(),now()) ")void add(Category category);
}

运行请求查看

 数据库中已成功添加该记录

参数校验

用到上一篇讲到的对实体对象变量进行参数校验必须要传入有效参数

 

文章分类列表

 接口文档

业务实现 

编写CategoryController中的请求的方法

    @GetMappingpublic Result<List<Category>> list(){List<Category> cs = categoryService.list();return Result.success(cs);}

编写CategoryService接口抽象方法

    //列表List<Category> list();

编写CategoryServiceimpl接口实现类的方法

    @Overridepublic List<Category> list() {Map<String,Object> map = ThreadLocalUtil.get();Integer id = (Integer) map.get("id");return categoryMapper.list(id);}

编写CategoryMapper接口的方法

    //查询列表@Select("select * from category where create_user = #{id}")List<Category> list(Integer id);

 运行请求查看

 发现返回的日期格式有问题,需要转换一下

在实体类日期属性变量上使用@JsonFormat注解用于指定日期格式

重新运行项目再请求查看日期格式已指定好了

 

获取文章分类详情

接口文档 

业务实现

编写CategoryController中的请求的方法

    @GetMapping("/detail")public Result<Category> detail(){Category c = categoryService.findById();return Result.success(c);}

编写CategoryService接口抽象方法

    //根据id查询信息Category findById(Integer id);

编写CategoryServiceimpl接口实现类的方法

    @Overridepublic Category findById(Integer id) {Category c =categoryMapper.findById(id);return c;}

编写CategoryMapper接口的方法

    //根据id查询信息@Select("select * from category where id = #{id}")Category findById(Integer id);

运行请求查看

 

更新文章分类

接口文档 

业务实现

在实体类中对id成员变量加上注解进行参数校验 

编写CategoryController中的请求的方法

    @PutMappingpublic Result update(@RequestBody @Validated Category category){categoryService.update(category);return Result.success();}

编写CategoryService接口抽象方法

    //更新分类void update(Category category);

编写CategoryServiceimpl接口实现类的方法

    @Overridepublic void update(Category category) {categoryMapper.update(category);}

编写CategoryMapper接口的方法

    //更新分类@Select("update category set category_name=#{categoryName},category_alias=#{categoryAlias},update_time=now() where id=#{id}")void update(Category category);

运行请求查看

 

分组校验

问题

对实体成员变量进行参数校验时,不同的请求参数类型和需要的参数数量不同,如果按照其中一个接口的规范写死那么另一个接口所需的类型参数就会冲突导致不通过。所以需要对不同的接口单独定义参数校验 

概念 

  • 把校验项进行归类分组,在完成不同的功能的时候,校验指定组中的校验项
  • 定义分组
  • 定义校验项时指定归属的分组
  • 校验时指定要校验的分组

实现步骤

对添加文章和更新文章进行参数分组校验

在实体类中定义内部接口

对成员变量指定校验项分组

 在接口方法传参时对属性指定分组

这样就分组好了,然后请求参数也不会互相影响。 

 

总结

  1. 在实体类内部定义接口来定义分组
  2. 通过groups属性指定对校验项分组
  3. 给@Validated注解的value属性赋值用于指定分组
  4. 校验项默认属于Default分组
  5. 定义校验项时如果没有指定分组,则属于Default分组,分组可以继承

删除文章分类

接口文档

业务实现 

编写CategoryController中的请求的方法

    @DeleteMappingpublic Result delete(Integer id){categoryService.delete(id);return Result.success();}

编写CategoryService接口抽象方法

    //删除分类void delete(Integer id);

编写CategoryServiceimpl接口实现类的方法

    @Overridepublic void delete(Integer id) {categoryMapper.delete(id);}

编写CategoryMapper接口的方法

    //删除分类@Delete("delete from category where id = #{id}")void delete(Integer id);

运行请求查看

 数据库中已成功删除

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

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

相关文章

2024最新行业领域名词解释大全

2024最新行业领域名词解释大全 &#x1f680; 大家好&#xff01;我是你们的老朋友猫头虎&#x1f42f;。今天要为大家带来2024年最新的行业领域名词解释大全&#xff01;在这个信息爆炸的时代&#xff0c;准确了解不同领域的行业动态、工作机会和职业前景至关重要。下面我会分…

阿里巴巴中国站关键字搜索API返回值全攻略:精准定位所需商品

当使用阿里巴巴中国站的关键字搜索API时&#xff0c;理解其返回值的结构和内容对于精准定位所需商品至关重要。以下是一份全面的攻略&#xff0c;帮助你更好地利用这个API&#xff1a; 在商品列表中&#xff0c;每个商品对象都包含丰富的信息&#xff0c;以帮助你精准定位所需商…

伙伴匹配(后端)-- 前后端日期格式化

后端时间格式化 后端时间格式化 在expireTime属性加上一个格式化注解&#xff0c;并给定格式 前端过期时间格式化 下载一个moment格式化工具&#xff08;我安装失败了日期格式化也成功了&#xff09; npm install moment这一页和添加队伍新增这一行&#xff08;还要导入mom…

如何实现自定义度量指标和Actuator端点?

本文我们将介绍Spring Boot中一个非常有特色的主题&#xff0c;这个主题就是系统监控。系统监控是Spring Boot中引入的一项全新功能&#xff0c;对于管理应用程序运行时状态非常有用。Spring Boot Actuator组件是承载系统监控功能的组件&#xff0c;通过一系列HTTP端点提供系统…

网络错误码大全

网络错误码是指在网络通信过程中出现的各种错误代码。以下是一些常见的网络错误码&#xff1a; 400 Bad Request - 请求无效401 Unauthorized - 请求未经授权403 Forbidden - 禁止访问404 Not Found - 页面未找到500 Internal Server Error - 服务器内部错误502 Bad Gateway -…

Python数据爬取超简单入门

## 什么是网络爬虫&#xff1f; 网络爬虫是一种自动浏览器程序&#xff0c;能够自动地从互联网获取数据。爬虫的主要任务是访问网页&#xff0c;分析网页内容&#xff0c;然后提取所需的信息。爬虫广泛应用于数据收集、数据分析、网页内容监控等领域。 ## 爬虫的基本步骤 1.…

2025第23届太原煤炭(能源)工业技术与装备展览会

第二十三届太原煤炭&#xff08;能源&#xff09;工业技术与装备展览会 邀 请 函 指导单位&#xff1a; 中国煤炭工业协会 主办单位&#xff1a;山西省煤炭工业协会 承办单位&#xff1a;太原奇新展览有限公司 展览时间&#xff1a;2025年4月22-24日 展览地点&#xff1a…

Obsidian dataview 使用入门

Dataview有四种展示格式&#xff1a;list、table、task、calendar。 本文只介绍前面两种。 语法总结 通过#标签 dataview LIST FROM #标签 通过"文件夹" dataview LIST FROM "文件夹名" 通过[ [ 文件链接 ] ] 选择链接到一个文件&#xff0c;或者…

深入了解C/C++的内存区域划分

&#x1f525;个人主页&#xff1a;北辰水墨 &#x1f525;专栏&#xff1a;C学习仓 本节我们来讲解C/C的内存区域划分&#xff0c;文末会附加一道题目来检验成果&#xff08;有参考答案&#xff09; 一、大体有哪些区域&#xff1f;分别存放什么变量开辟的空间&#xff1f; …

探索AI编程新纪元:从零开始的智能编程之旅

提示&#xff1a;Baidu Comate 智能编码助手是基于文心大模型&#xff0c;打造的新一代编码辅助工具 文章目录 前言AI编程概述&#xff1a;未来已来场景需求&#xff1a;从简单到复杂&#xff0c;无所不包体验步骤&#xff1a;我的AI编程初探试用感受&#xff1a;双刃剑下的深思…

分类预测 | MATLAB实现LSSVM最小二乘支持向量机多分类预测

分类预测 | MATLAB实现LSSVM最小二乘支持向量机多分类预测 目录 分类预测 | MATLAB实现LSSVM最小二乘支持向量机多分类预测分类效果基本介绍程序设计参考资料分类效果 基本介绍 MATLAB实现LSSVM最小二乘支持向量机多分类预测。最小二乘支持向量机(Least Squares Support Vecto…

容器内存使用率(container_memory_working_set_bytes)高问题排查

背景 五一节假日值班期间&#xff0c;告警群里突然告警容器内存使用率高于 90%&#xff0c;并且后续一直有告警出现。随即登入指标监控系统查看该告警指标&#xff0c;如下&#xff1a; 该指标是通过 container_memory_working_set_bytes / container_spec_memory_limit_bytes…

44 网络基础

本章重点 了解网络发展背景&#xff0c;对局域网/广域网的概念有基本认识 了解网络协议的意义&#xff0c;重点理解TCP/IP五层结构模型 学习网络传输的基本流程&#xff0c;理解封装和分用 目录 1.网络发展 2.协议 3.OSI七层模型 4.TCP/IP五层模型 5.网络传输流程图 6.网络中…

广东企业cad图纸加密软件如何对cad图纸批量加密?企业加密方案如何选?

互联网在不断的发展进步&#xff0c;对于广东企业的的cad图纸来讲&#xff0c;也是非常需要保密的&#xff0c;企业cad设计图纸的在企业日常使用中的正常应用&#xff0c;互联网发展到今天&#xff0c;对于企业数据泄露不断的增多&#xff0c;企业数据泄露的方式也是多种多样的…

WRT1900ACS搭建openwrt服务器小记

参考链接 wrt1900acs openwrt wrt1900acs openwrt 刷机 wrt1900acs原生固件刷openwrt-23.05.3-mvebu-cortexa9-linksys_wrt1900acs-squashfs-factory.img wrt1900acs openwrt更新刷openwrt-23.05.3-mvebu-cortexa9-linksys_wrt1900acs-squashfs-sysupgrade.bin 通过WEB UI来…

【数据结构】带你轻松掌握算法的复杂度

引入&#xff1a; 哈喽大家好&#xff0c;我是野生的编程萌新&#xff0c;首先感谢大家的观看。数据结构的学习者大多有这样的想法&#xff1a;数据结构很重要&#xff0c;一定要学好&#xff0c;但数据结构比较抽象&#xff0c;有些算法理解起来很困难&#xff0c;学的很累。我…

Spring Gateway的核心功能:路由、过滤、限流一网打尽

Spring Gateway的简介 在微服务架构的世界里&#xff0c;如同繁星点点的服务需要一个指挥家&#xff0c;将它们有序地组织起来&#xff0c;让它们能够和谐地协同工作。这个指挥家&#xff0c;就是Spring Gateway。它是一个基于Spring Framework 5、Project Reactor和Spring Bo…

vue2.0与vue3.0

这里写自定义目录标题 Object.definePropertycreateApp自定义指令更新to:bodydata多根节点组件、函数式组件一些其他与开发者关系较为密切的更新最具有颠覆意义的响应-组合 API数据传递demo Object.defineProperty 我们知道 Vue2 是响应式原理基于 Object.defineProperty 方法…

『 Linux 』基础IO/文件IO (万字)

文章目录 &#x1f984; 什么是IO&#x1f984; 文件IO(库级别)&#x1f47e; 文件的打开与关闭&#x1f47e; 当前路径&#x1f47e; 文件的读写 &#x1f984; 标准输入输出流&#x1f984; 文件IO(系统级别)&#x1f47e; 文件的打开&#x1f47e; 文件的关闭&#x1f47e; …

河南办理乙级城镇燃气工程设计资质需要多久

1. 准备资料&#xff1a;首先&#xff0c;申请单位或个人需要准备齐全符合要求的申请资料&#xff0c;包括相关证明文件、设计业绩、技术能力证明等。 2. 递交申请&#xff1a;将准备好的资料递交给当地相关管理部门&#xff0c;提交申请办理乙级城镇燃气工程设计资质。 3. 审核…