后端系统开发之——接口参数校验
今天难得双更,大家点个关注捧个场
原文地址:后端系统开发之——接口参数校验 - Pleasure的博客
下面是正文内容:
前言
在上一篇文章中提到了接口的开发,虽然是完成了,但还是缺少一些细节——传入参数的校验。
即用户传入的参数要符合系统的使用需求。比如用户名和密码的长度要适宜,虽然可以在前端页面直接进行筛选,但是在后端再加一层可以使系统更加稳固。
这篇文章就主要来谈谈这个。具体的文件内容详见上一篇博文。
正文
前置知识
主要是关于正则表达式的,知道的可以直接跳过。
- . (点号): 匹配除换行符以外的任意单个字符。
- \d: 匹配一个数字字符。
- \w: 匹配一个单词字符,包括字母、数字和下划线。
- \s: 匹配一个空白字符,包括空格、制表符、换行符等。
- ^: 匹配字符串的开始位置。
- $: 匹配字符串的结束位置。
- \b: 匹配一个单词边界。
- []: 字符集,匹配其中任意一个字符。
- |: 或,用于在两个模式之间选择一个。
- ?: 匹配零次或一次前面的元素。
- +: 匹配一次或多次前面的元素。
- ***: 匹配零次或多次前面的元素。
- {n}: 匹配前面元素恰好 n 次。
- {n,}: 匹配前面元素至少 n 次。
- {n,m}: 匹配前面元素至少 n 次,至多 m 次。
正式操作
接口返回的响应信息格式要以接口文档为准。
这里的信息响应格式统一为{code message data},在Result.java中已经进行了规范。
虽然传入参数的校验可以通过手动的方式进行检验,即通过if和else的判断来进行检验,但当参数的规模增多代码的编写量也就成倍的增多,能偷懒就偷懒。
所以这里就需要用到一个新的依赖——Spring Validation。
同样的,先在pom.xml文件中添加下面的内容。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>
我们只需要在参数前添加下面这样的字段,就可以起到校验的作用
package org.example.controller;import jakarta.validation.constraints.Pattern;
import org.example.pojo.Result;
import org.example.pojo.User;
import org.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/user")
@Validated
public class UserController {@Autowiredprivate UserService userService;@PostMapping("register")public Result register(@Pattern(regexp = "^\\S{5,16}$") String username, @Pattern(regexp = "^\\S{5,16}$") String password) {//查询用户User u = userService.findByUserName(username);if (u == null) {//没有占用//注册userService.register(username, password);return Result.success();} else {//占用return Result.error("用户名已被占用");}//注册}
}
然而返回的参数格式是{timestamp status error path},不符合要求
最后再来规范一下响应信息的格式以符合接口文档的要求。
在org.example文件加下新建Exception文件夹,其下新建Java类GlobalExceptionHandler.java。
package org.example.exception;import org.example.pojo.Result;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;@RestControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)public Result handleException(Exception e){e.printStackTrace();return Result.error(StringUtils.hasLength(e.getMessage())? e.getMessage() : "操作失败");}
}
测试传入参数,操作完成。

尾声
后面是关于登录接口的开发。
相关文章:
后端系统开发之——接口参数校验
今天难得双更,大家点个关注捧个场 原文地址:后端系统开发之——接口参数校验 - Pleasure的博客 下面是正文内容: 前言 在上一篇文章中提到了接口的开发,虽然是完成了,但还是缺少一些细节——传入参数的校验。 即用户…...
IDEA 配置阿里规范检测
IDEA中安装插件 配置代码风格检查规范 使用代码风格检测 在代码类中,右键 然后会给出一些不符合规范的修改建议: 保存代码时自动格式化代码 安装插件: 配置插件:...
数据仓库系列总结
一、数据仓库架构 1、数据仓库的概念 数据仓库(Data Warehouse)是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。 数据仓库通常包含多个来源的数据,这些数据按照主题进行组织和存储&#x…...
gitlab runner没有内网的访问权限应该怎么解决
如果你的GitLab Runner没有内网访问权限,但你需要访问内部资源(如私有仓库或其他服务),你可以考虑以下几种方法: VPN 或 SSH 隧道: 在允许的情况下,通过VPN或SSH隧道连接到内部网络。这将允许Gi…...
el-tree 设置默认展开指定层级
el-tree默认关闭所有选项,但是有添加或者编辑删除的情况下,需要刷新接口,此时会又要关闭所有选项; 需求:在编辑时、添加、删除 需要将该内容默认展开 <el-tree :default-expanded-keys"expandedkeys":da…...
python便民超市管理系统flask-django-nodejs-php
随着人们生活节奏的加快,以前传统的购物方式发生了巨大的改变,以前一个超市要想经营好自己的门店,每天都要忙着记账出账,尤其是出库入库统计,如果忙中出乱,可能导致今天所有的营业流水,要重新换…...
HarmonyOS — BusinessError 不能被 JSON.stringify转换
在鸿蒙中BusinessError 继承于Error,而在JavaScript(以及TypeScript,因为它是JavaScript的超集)中,Error 对象包含一些不能被 JSON.stringify 直接序列化的属性。JSON.stringify 方法会将一个JavaScript对象或者值转换…...
JupyterNotebook 如何切换使用的虚拟环境kernel
在Jupyter Notebook中,如果需要修改使用的虚拟环境Kernel: 首先,需要确保虚拟环境已经安装conda上【conda基本操作】 打开Jupyter Notebook。 在Jupyter Notebook的顶部菜单中,选择 “New” 在弹出的窗口中,列出了…...
预防GPT-3和其他复杂语言模型中的“幻觉”
标题:预防GPT-3和其他复杂语言模型中的“幻觉” 正文: “假新闻”的一个显著特征是它经常在事实正确信息的环境中呈现虚假信息,通过一种文学渗透的方式,使不真实的数据获得感知权威,这是半真半假力量令人担忧的展示。…...
从源码解析AQS
前置概念 要彻底了解AQS的底层实现就必须要了解一下线程相关的知识。 包括voliatevoliate 我们使用翻译软件翻译一下volatile,会发现它有以下几个意思:易变的;无定性的;无常性的;可能急剧波动的;不稳定的;易恶化的;易挥发的;易发散的。这也正式使用vola…...
基于Spring Boot的云上水果超市的设计与实现
摘 要 伴随着我国社会的发展,人民生活质量日益提高。于是对云上水果超市进行规范而严格是十分有必要的,所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套云上水果超市,帮助商家进行…...
游戏引擎中的动画基础
一、动画技术简介 视觉残留理论 - 影像在我们的视网膜上残留1/24s。 游戏中动画面临的挑战: 交互:游戏中的玩家动画需要和场景中的物体进行交互。实时:最慢需要在1/30秒内算完所有的场景渲染和动画数据。(可以用动画压缩解决&am…...
springboot3快速入门案例2024最新版
前边 springboot3 系统要求 技术&工具版本(or later)maven3.6.3 or later 3.6.3 或更高版本Tomcat10.0Servlet9.0JDK17 SpringBoot的主要目标是: 为所有 Spring 开发提供更快速、可广泛访问的入门体验。开箱即用,设置合理的…...
软考 系统架构设计师系列知识点之系统性能(1)
所属章节: 第2章. 计算机系统基础知识 第9节. 系统性能 系统性能是一个系统提供给用户的所有性能指标的集合。它既包括硬件性能(如处理器主频、存储器容量、通信带宽等)和软件性能(如上下文切换、延迟、执行时间等)&a…...
Trent-FPGA硬件设计课程
本课程涵盖FPGA硬件设计的基础概念和实践应用。学生将学习Verilog语言编程、数字电路设计原理、FPGA架构和开发工具的使用。通过项目实践,掌握FPGA设计流程和调试技巧,为硬件加速和嵌入式系统开发打下坚实基础。 课程大小:4.3G 课程下载&am…...
【大模型学习记录】db-gpt源码安装问题汇总
1、首次源码安装时安装的其实dbgpt到conda环境中,会将路径一起安装。 如果有其他的路径使用同样的conda环境会报错,一直读取的就是原先的路径的内容。需要自己新创建一个conda env 2、界面中配置知识库问答时,报错 # 1、报的错如下&#x…...
QB PHP 多语言配置
1: 下载QBfast .exe 的文件 2: 安装的时候 ,一定点击 仅为我 安装 而不是 所有人 3: 如果提示 更新就 更新 , 安装如2 4: 如果遇到 新增 或者编辑已经 配置的项目时 不起作用 : 右…...
Kubernetes实战(三十一)-使用开源CEPH作为后端StorageClass
1 引言 K8S在1.13版本开始支持使用Ceph作为StorageClass。其中云原生存储Rook和开源Ceph应用都非常广泛。本文主要介绍K8S如何对接开源Ceph使用RBD卷。 K8S对接Ceph的技术栈如下图所示。K8S主要通过容器存储接口CSI和Ceph进行交互。 Ceph官方文档:Block Devices a…...
【Python爬虫】详解BeautifulSoup()及其方法
文章目录 🍔准备工作🌹BeautifulSoup()⭐代码实现✨打印标签里面的内容✨快速拿到一个标签里的属性✨打印整个文档🎆获取特定标签的特定内容 🌹查找标签🎈在文档查找标签 find_all🎈正则表达式搜索 &#x…...
C语言经典算法-8
文章目录 其他经典例题跳转链接41.基数排序法42.循序搜寻法(使用卫兵)43.二分搜寻法(搜寻原则的代表)44.插补搜寻法45.费氏搜寻法 其他经典例题跳转链接 C语言经典算法-1 1.汉若塔 2. 费式数列 3. 巴斯卡三角形 4. 三色棋 5. 老鼠…...
效率翻倍:利用Streamlit界面快速A/B测试,找到最佳转换参数组合
效率翻倍:利用Streamlit界面快速A/B测试,找到最佳转换参数组合 1. 为什么需要参数A/B测试 在2.5D转真人的图像转换任务中,参数组合的选择直接影响最终效果。传统的命令行工具需要反复修改配置文件并重启服务,效率极低。而Anythi…...
CoPaw多语言翻译效果展示:技术文档的中英互译质量评估
CoPaw多语言翻译效果展示:技术文档的中英互译质量评估 1. 引言 技术文档翻译一直是专业领域的痛点。传统翻译工具在处理计算机科学、医学等专业内容时,常常出现术语不准确、句式生硬、语境丢失等问题。最近测试了CoPaw这款多语言翻译工具,它…...
OpenClaw+千问3.5-9B数据清洗:Excel复杂表格自动化处理
OpenClaw千问3.5-9B数据清洗:Excel复杂表格自动化处理 1. 为什么需要自动化Excel处理 每次面对上百行的Excel表格时,我总会在合并单元格和异常值上浪费大量时间。作为数据分析师,最痛苦的莫过于收到业务部门发来的"美化版"报表—…...
告别Navicat!免费开源的DBeaver,手把手教你从下载到连接MySQL数据库
数据库管理新选择:DBeaver从入门到精通实战指南 在数据库管理领域,商业软件长期占据主导地位,但开源工具的崛起正在改变这一格局。作为一名长期与数据库打交道的开发者,我深知Navicat等商业工具虽然功能强大,但高昂的授…...
一键迁移方案:OpenClaw配置备份与Qwen3-4B模型快速恢复
一键迁移方案:OpenClaw配置备份与Qwen3-4B模型快速恢复 1. 为什么需要配置迁移方案 上周我的开发机突然硬盘故障,导致所有OpenClaw配置丢失。重新配置飞书通道、模型连接和技能库花了大半天时间。这次教训让我意识到:自动化工具的配置本身也…...
从DH参数到3D动画:手把手教你用SimMechanics在Simulink里‘拼’出一个六轴机械臂
从DH参数到3D动画:手把手教你用SimMechanics在Simulink里‘拼’出一个六轴机械臂 刚接触机器人学的同学常会遇到这样的困境:DH参数表背得滚瓜烂熟,但面对真实的机械臂结构时,那些α、a、d、θ参数突然变得抽象难懂。我在研究生阶段…...
OpenClaw创意辅助:Qwen3.5-9B-AWQ-4bit实现设计草图转文案
OpenClaw创意辅助:Qwen3.5-9B-AWQ-4bit实现设计草图转文案 1. 为什么设计师需要AI创意辅助 作为独立设计师,我经常遇到这样的困境:在灵感迸发时快速绘制的手稿,几天后回看却难以还原当时的完整思路。传统工作流中,我…...
手把手教你开发电竞护航系统:从零到上线的小程序全流程
手把手教你开发电竞护航系统:从零到上线的小程序全流程 电竞产业近年来呈现爆发式增长,职业选手和游戏爱好者对专业服务的需求与日俱增。一款优秀的电竞护航小程序不仅能提供赛事资讯、战队管理、训练计划等基础功能,更能通过智能算法为玩家匹…...
别再自己造轮子了!用InsightFace+FastAPI快速搭建一个高精度人脸识别Web服务
基于InsightFace的高精度人脸识别Web服务实战指南 1. 为什么选择InsightFace构建人脸识别服务 三年前我接手一个考勤系统项目时,曾花费两个月时间从零训练FaceNet模型,结果上线后遇到戴眼镜员工识别率骤降的问题。直到发现InsightFace这个开源项目&#…...
别再问怎么连了!Win10蓝牙串口配对仪器设备,保姆级图文教程(含端口号查看)
Win10蓝牙串口连接实战指南:从配对到调试的全流程解析 蓝牙串口通信在嵌入式开发中扮演着关键角色,特别是在需要无线传输数据的场景下。想象一下,当你面对一台工业测量设备,需要通过蓝牙实时获取数据流,却发现Windows …...
