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

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

原文地址:后端系统开发之——接口参数校验 - 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 {

    @Autowired
    private 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() : "操作失败");
    }
}

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

尾声

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

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

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

相关文章

51、CR-GCN:EEG通道拓扑结构+脑功能连接捕获EEG通道关系,用于情感识别[我处理的是原始EEG数据哦]

文章&#xff1a; CR-GCN: Channel-Relationships-Based Graph Convolutional Network for EEG Emotion Recognition 单位&#xff1a; 上海大学计算机学院、上海工业计算机、喀什大学计算机学院。提出CR-GCN&#xff0c;使用GCN的邻接矩阵提取情感数据中的特征用于分类。 2…

分布式搜索引擎elasticsearch专栏三

1.数据聚合 聚合&#xff08;aggregations&#xff09;可以让我们极其方便的实现对数据的统计、分析、运算。例如&#xff1a; 什么品牌的手机最受欢迎&#xff1f; 这些手机的平均价格、最高价格、最低价格&#xff1f; 这些手机每月的销售情况如何&#xff1f; 实现这些…

【双指针】算法例题

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

面试六分钟,难题显真章

职场&#xff0c;这个充满机遇与挑战的舞台&#xff0c;总会在不经意间上演着意想不到的转折。我从一家小公司转投到另一家&#xff0c;原本期待着新的工作环境和更多的发展机会&#xff0c;然而现实却给了我一个不小的打击。 新公司的加班文化&#xff0c;如同一个巨大的漩涡…

服务器端(Debian 12)配置jupyter与R 语言的融合

融合前&#xff1a; 服务器端Debian 12,域名&#xff1a;www.leyuxy.online 1.安装r-base #apt install r-base 2.进入R并安装IRkernel #R >install.packages(“IRkernel”) 3.通过jupyter notebook的Terminal执行&#xff1a; R >IRkernel::installspec() 报错 解决办…

leetcode 303

leetcode 303 题目 例子 思路 使用数组存储[0, i] 的vals 值之和&#xff0c; sum[i] 表示 第0个元素到第(i-1)个元素之和。 代码 class NumArray {vector<int> sum; public:NumArray(vector<int>& nums) {int n nums.size();sum.resize(n1);for(int i0; …

springboot项目讲解

技术栈 vue(前端) springboot(后端主框架) mybatis&#xff08;ORM&#xff0c;用于后端和数据库的映射&#xff0c;即java对象转换成表&#xff09; mysql (关系型数据库) 顶层结构 .idea&#xff1a; idea缓存文件(不需要管) src&#xff1a;代码核心文件夹 —main&#xf…

进程间通信 之 共享内存

目录 什么是共享内存&#xff1f; 共享内存的系统调用接口 共享内存 进程间通信的本质及前提&#xff1a;让不同的进程看到同一份资源&#xff01; 共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间&#xff0c;这些进程间数据传递不再涉及到内核&a…

知识学习app

管理端&#xff1a; &#xff08;1&#xff09;登录 &#xff08;2&#xff09;首页数据报表&#xff1a;1.数据概括2.一周数据走势 &#xff08;3&#xff09;内容管理&#xff1a; 1.分类管理&#xff1a;新增&#xff0c;修改&#xff0c;删除&#xff0c;排序 2.八股文&…

基础监控理论

文章目录 监控流程架构体系监控分类 监控发展和技术企业中监控发展阶段通用技术和工具 监控流程架构体系 监控流程架构体系是确保信息系统健康、稳定运行的重要组成部分&#xff0c;它包括监控系统的设计、搭建、数据分析、数据采集、稳定性测试、自动化集成、部署上线以及图形…

LAMP 世界上使用最广泛的框架(安装LAMP框架)快照

说是框架就不只是一个东西。L:Linux&#xff0c;一种操作系统类型&#xff0c;专为服务器领域服务. A:Apache&#xff0c;web 服务器。 M:MySQL&#xff0c;数据库&#xff0c;存储项目的元数据&#xff0c;真实数据会存放在硬盘中。 P:PHP&#xff0c;一种编程语言&#xff0…

mongoDB7.0.6版安装与使用(最新版踩坑记录)

这里写自定义目录标题 0.前言1.MongoDB下载与安装2.启动服务及验证3.命令行访问4.navicat访问5.停止服务 0.前言 本文总结了最近版mongoDB下载安装的过程及简单的应用&#xff0c;整个过程不涉及修改配置文件&#xff0c;甚至不用设置用户名密码也不用登录认证&#xff0c;在进…

Knife4j的相关知识点!!

一、基础概念 knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望它能像一把匕首一样小巧,轻量,并且功能强悍! Knif4j&#xff08;原名为 Swagger-Bootstrap-UI&#xff09;是一款基于 Swagger 实现的文档管理工具&am…

Linux命令之Tmux

1. Tmux是什么&#xff1f; Tmux是一个终端复用器&#xff08;terminal multiplexer&#xff09;&#xff0c;属于常用的开发工具&#xff0c;学会了之后可以大大的提高工作效率。 1.1 基本概念 在使用tmux之前我们先了解关于tmux的几个名词&#xff1a; session&#xff0c…

[Qt] 点击QTableWidget item项后键盘输入导致崩溃

复现场景 Qt版本 5.9.8 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);ui->tableWidget->setRowCount(1);ui->tableWidget->setColumnCount(2);Q…

【数据结构取经之路】栈

目录 引言 栈的性质 顺序栈 栈的基本操作 初始化 销毁 插入 删除 判空 取栈顶元素 栈的大小 完整代码&#xff1a; 引言 栈(stack)&#xff0c;可以用数组实现&#xff0c;也可以用链表实现。用数组实现的栈叫顺序栈&#xff0c;用链表实现的栈叫链式栈&#…

PriorityQueue集合源码分析

PriorityQueue集合源码分析 文章目录 PriorityQueue集合源码分析前置知识一、字段分析二、构造函数分析三、方法分析四、总结 PriorityQueue 优先级队列&#xff0c;是基于堆的结构来构建的。而堆是基于完全二叉树来实现的&#xff0c;而二叉树除了可以用节点来实现也可以用数组…

移动WEB开发之流式布局

一、移动端基础 1、浏览器 总结&#xff1a;兼容移动端主流浏览器&#xff0c;处理webkit内核浏览器即可。 2、移动端调试方法 Chrome devtools&#xff08;谷歌浏览器&#xff09;的模拟手机调试 搭建本地web服务器&#xff0c;手机和服务器一个区域网内&#xff0c;通过手机…

SCI一区 | Matlab实现GWO-TCN-BiGRU-Attention灰狼算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测

SCI一区 | Matlab实现GWO-TCN-BiGRU-Attention灰狼算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现GWO-TCN-BiGRU-Attention灰狼算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测预测效果基本介绍模型描述程序…

框架篇常见面试题

1、Spring框架的单例bean是线程安全的吗&#xff1f; 2、什么是AOP&#xff1f; 3、Spring的事务是如何实现的&#xff1f; 4、Spring事务失效的场景 5、SpringBean的声明周期 6、Spring的循环依赖 7、SpringMVC的执行流程 8、SpringBoot自动配置原理 9、Spring常见注解