后端系统开发之——接口参数校验

今天难得双更,大家点个关注捧个场

原文地址:后端系统开发之——接口参数校验 - Pleasure的博客

下面是正文内容:

前言

在上一篇文章中提到了接口的开发,虽然是完成了,但还是缺少一些细节——传入参数的校验。

即用户传入的参数要符合系统的使用需求。比如用户名和密码的长度要适宜,虽然可以在前端页面直接进行筛选,但是在后端再加一层可以使系统更加稳固。

这篇文章就主要来谈谈这个。具体的文件内容详见上一篇博文。

正文

前置知识

主要是关于正则表达式的,知道的可以直接跳过。

  1. . (点号): 匹配除换行符以外的任意单个字符。
  2. \d: 匹配一个数字字符。
  3. \w: 匹配一个单词字符,包括字母、数字和下划线。
  4. \s: 匹配一个空白字符,包括空格、制表符、换行符等。
  5. ^: 匹配字符串的开始位置。
  6. $: 匹配字符串的结束位置。
  7. \b: 匹配一个单词边界。
  8. []: 字符集,匹配其中任意一个字符。
  9. |: 或,用于在两个模式之间选择一个。
  10. ?: 匹配零次或一次前面的元素。
  11. +: 匹配一次或多次前面的元素。
  12. *** 匹配零次或多次前面的元素。
  13. {n}: 匹配前面元素恰好 n 次。
  14. {n,}: 匹配前面元素至少 n 次。
  15. {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() : "操作失败");}
}

测试传入参数,操作完成。

尾声

后面是关于登录接口的开发。

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

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

相关文章

JMeter 并发测试和持续性压测详解

并发测试和持续性压测都是评估系统性能的常用方法&#xff0c;它们可以帮助开发人员发现并解决系统中的性能问题。本文来详细介绍下。 概念 并发测试&#xff1a; 旨在评估系统在同时处理多个用户请求时的性能。在这种 测试 中&#xff0c;系统会暴露于一定数量的用户负载下&…

【Flutter和H5数据传递问题】window.postMessage方法引起的数据问题

Flutter 前言问题双引号问题请求数据问题 总结 前言 距离上一篇博客已经过了很长时间了&#xff0c;这次在做公司项目中又遇到了新的问题&#xff0c;决定还是写出来看看各位大神对此有什么看法&#xff0c;分享一下各位的想法。 问题 首先&#xff0c;公司项目的框架是由Fl…

2024最新华为OD机试试题库全 -【执行时长】- C卷

1. 🌈题目详情 1.1 ⚠️题目 为了充分发挥GPU算力,需要尽可能多的将任务交给GPU执行,现在有一个任务数组,数组元素表示在这1秒内新增的任务个数且每秒都有新增任务。 假设GPU最多一次执行n个任务,一次执行耗时1秒,在保证GPU不空闲情况下,最少需要多长时间执行完成。…

Elasticsearch面试系列-01

1. 什么是 Elasticsearch? ES是一种开源、RESTful、可扩展的基于文档的搜索引擎,它构建在Lucene库上。 用户使用Kibana就可以可视化使用数据,同时Kibana也提供交互式的数据状态呈现和数据分析。 Apache Lucene搜索引擎基于JSON文档来进行搜索管理和快速搜索。 Elasticse…

图像分割在疾病诊断中的应用案例

图像分割在疾病诊断中的应用案例&#xff1a; 乳腺癌检测&#xff1a; 利用MRI图像&#xff0c;通过图像分割技术可以将乳腺组织与正常组织区分开来&#xff0c;进而检测出乳腺癌的早期迹象。 皮肤癌诊断&#xff1a; 对于皮肤镜下的图像&#xff0c;应用图像分割技术可以准确…

【双指针】算法例题

目录 二、双指针 25. 验证回文数 ① 26. 判断子序列 ① 27. 两数之和II - 输入有序数组 ② 28. 盛最多水的容器 ② 29. 三数之和 ② 二、双指针 25. 验证回文数 ① 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一…

Day60 (Golang) 单调栈 84.柱状图中最大的矩形

// 84.柱状图中最大的矩形 package mainimport "fmt"func largestRectangleArea(heights []int) int {// 初始化单调栈&#xff08;单调递减栈&#xff09;stack : []int{0}res : 0// 给原数组首位添加0// 数组头部加入0heights append([]int{0}, heights...)// 数组…

【EXPERIMENT】tmux、SCIP

【EXPERIMENT】tmux、SCIP 一、TMUX命令&#xff08;一&#xff09;会话操作&#xff08;二&#xff09;窗口操作&#xff08;三&#xff09;窗格操作 二、SCIP安装 一、TMUX命令 &#xff08;一&#xff09;会话操作 新建会话 tmux new -s name退出会话 ctrl B D查看会话…

C++_第三周做题总结_指针2

id:13 A.月份查询&#xff08;指针数组&#xff09; 题目描述 已知每个月份的英文单词如下&#xff0c;要求创建一个指针数组&#xff0c;数组中的每个指针指向一个月份的英文字符串&#xff0c;要求根据输入的月份数字输出相应的英文单词 1月 January 2月 February 3月 Marc…

行业回暖?这个行业岗位需求飙升6倍!程序员们提前恭喜了!

前言 随着今年史上最长春节假期正式收官&#xff0c;各行各业相继进入开工节奏&#xff0c;就业市场开启持续升温模式。 今年开工首周&#xff0c;人才需求增长明显&#xff0c;求职者活跃度大大增多&#xff0c;就业市场进入了繁忙有序的节奏&#xff0c;呈现出春招市场的勃…

Android获取某个app首次安装时间和更新时间

在Android中&#xff0c;可以使用PackageManager类来获取应用程序的安装时间和上次更新时间。以下是如何实现的一般步骤&#xff1a; 以微信为例&#xff1a; 获取一个PackageManager的实例。使用PackageManager的getPackageInfo方法&#xff0c;传入微信的包名&#xff08;通…

QT网络编程之获取本机网络信息

一.概述 查询一个主机的MAC地址或者IP地址是网络应用中常用到的功能&#xff0c;Qt提供了QHostInfo和QNetworkInterface 类可以用于此类信息的查询 1.QHostInfo 类&#xff08;显示和查找本地的信息&#xff09; 2.QNetworkInterface 类&#xff08;获得应用程序上所在主机的…

Linux性能测试工具整理

性能测试工具&#xff1a;Unixbench lmbench stream iozone fio netperf spec2000 spec2006 一、unixbench unixbench主要是用于系统基础性能测试&#xff0c;unixbench也包含一些非常简单的2D和3D图形测试 UnixBench一个基于系统的基准测试工具&#xff0c;不单纯是CPU 内存 …

在window命令行中,使用conda创建新的虚拟环境时出现的问题以及解决办法

一.出现的问题 C:\Users\zhu>conda create -n ML python3.8 Collecting package metadata (current_repodata.json): failedCondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64/current_repodata.js…

南京大学AI考研,宣布改考408!

官网还没通知 附上南大与同层次学校近四年的分数线对比&#xff0c;整体很难 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 如果确定要冲南大的话建议提早调整自己的复习路线&…

Springboot中使用@Async注解7大失效场景及解决方案

Springboot中使用Async注解7大失效场景及解决方案 前言正文场景一&#xff1a;调用者与被调用者在同一个类中解决方案 场景二&#xff1a;配置类未启用异步支持解决方案 场景三&#xff1a;方法不是 public 的解决方案 场景四&#xff1a;线程池未正确配置解决方案 场景五&…

Combining external-latent attention for medical image segmentation

结合外部潜在注意的医学图像分割 摘要 注意机制是提高医学图像分割性能的新切入点。如何合理分配权重是注意力机制的关键,目前流行的方法包括全局压缩和使用自注意操作的非局部信息交互。然而,这些方法过于关注外部特征,缺乏对潜在特征的开发。全局压缩方法通过全局均值或…

C01 C++ Modding

Modding Programs running on a user-controlled computer are amenable to “modding” . If a piece of information, such as an integer representing health or lives, exists in RAM, one may find and edit it to their liking. Taken to the extreme, entirely new …

threejs 模型聚焦定位

需求&#xff1a;鼠标选中模型&#xff0c;然后点击定位按钮&#xff0c;将相机平移到模型跟前&#xff0c;相机视线不变 var box new THREE.Box3();//包围盒box.expandByObject(model);//model是模型var center new THREE.Vector3();box.getCenter(center);//获取中心点var …

测试人员如何进行需求分析?

在进行测试用例设计之前&#xff0c;我们通常需要对需求文档进行分析&#xff0c;甚至在需求评审阶段从测试角度给出建议。通过需求分析&#xff0c;不仅可以输出测试点&#xff0c;也可以发现需求中存在的问题。 业务角度和技术角度 测试需求的分析可以从两个不同的角度进行…