通过注解实现接口入参检查

@valid 通过注解实现接口入参检查

  • 前言
  • 一、引入依赖
  • 二、使用步骤
    • 1.创建入参对象 request
    • 2.提供一个接口 controller
    • 3.全局异常捕获 GlobalExceptionHandler
    • 4.执行结果
  • 总结


前言

作为一个后端开发,一般是不单独对接口参数的每个入参进行长度、最大值、最小值判断。
但是~~总会遇到要检查的时候,比如说:测试给我提了几个参数长度校验
bug1:年龄输入 99999 没有合理性检查
bug2:姓名输入 啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧啧 没做长度校验~

遇到这种吧,前端又不改,只有后端来检查下咯。


一、引入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

二、使用步骤

1.创建入参对象 request

代码如下(示例):

import lombok.Data;

import javax.validation.constraints.Max;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;


/**
 * @author long_tao
 */
@Data
public class ValidOneRequest {
    @NotNull(message = "唯一键不能为空")
    private String uuid;
    @Size(max = 20, message = "name最大长度为20")
    private String name;
    @NotNull(message = "状态不能为空")
    private Boolean status;
    @Max(value = 200, message = "年龄不能大于200")
    private Integer age;
}

2.提供一个接口 controller

代码如下(示例):

import com.example.demo.request.ValidOneRequest;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;

/**
 * @author lobster
 */
@RestController
@RequestMapping("valid")
public class ValidController {
    @PostMapping(value = "demo", name = "使用注解,实现入参字段长度校验、非空校验")
    public String validDemo(@Valid @RequestBody ValidOneRequest validOneRequest) {
        return "success!";
    }
}

3.全局异常捕获 GlobalExceptionHandler

import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import javax.servlet.http.HttpServletRequest;


/**
 * @author lobster
 * GlobalExceptionHandler中做了异常处理 所以一般情况下不需要再去手动捕获异常
 **/
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
    /**
     * 请求接口,入参校验
     */
    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    public String handleException400(HttpServletRequest req, MethodArgumentNotValidException e) {
        e.printStackTrace();
        BindingResult bindingResult = e.getBindingResult();
        StringBuilder sb = new StringBuilder();
        for (FieldError fieldError : bindingResult.getFieldErrors()) {
            sb.append(fieldError.getDefaultMessage()).append(",");
        }
        String errorMessage = sb.toString();
        return errorMessage.substring(0, errorMessage.length() - 1);
    }

4.执行结果

在这里插入图片描述


总结

综上所述:可以针对接口的参数进行检查,并返回指定错误信息
我返回的是字符串,一般项目上返回的是对象,如:{“code”:500,“msg”:“XX字段超限\nXX字段超过最大值\n”}

希望每一个开发人员,都能干到退休,撒花~

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

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

相关文章

一款功能齐全的iOS混淆工具介绍及功能详解

机缘巧合偶遇iOS马甲包业务&#xff0c;前期也使用过目前市面上其他得工具&#xff0c;实际效果不太理想。经过大量实践&#xff0c;开发出一款功能齐全的混淆工具。工具的主要功能OC、C、Swift已封装成Mac应用&#xff0c;其他功能还在封装中&#xff0c;敬请期待。 马甲包的本…

YoloV8改进策略:Block改进|轻量级的Mamba打造优秀的YoloV8|即插即用,简单易懂|附Block结构图|检测、分割、关键点均适用(独家原创)

摘要 无Mamba不狂欢,今天给大家带来一个基于轻量级Mamba的改进。模块简单易懂,即插即用! 带领大家去征服更高的领域。 论文:《LightM-UNet:Mamba 辅助的轻量级 UNet 用于医学图像分割》 https://arxiv.org/pdf/2403.05246.pdf UNet及其变体在医学图像分割中得到了广泛…

英语技术会议常用语

个人整理。 自我介绍&#xff1a; Hello everyone, Im [Your Name], and Im excited to be here today. I work as [Your Position] at [Your Company/Organization], where I focus on [Brief Description of Your Role or Expertise]. Im looking forward to our discussion…

新火种AI|加密+AI,究竟是一场交易幻景,真正的价值提升?

作者&#xff1a;小岩 编辑&#xff1a;彩云 说起当下最热门的两个发展方向&#xff0c;非区块链和AI两大模块莫属。乍一看上去&#xff0c;这两个科技赛道并没有什么交集&#xff0c;甚至分属技术谱系的两个极端&#xff1a;一个是在封闭数据平台上培育中心化的智能&#xf…

Linux Crontab定时任务介绍及检测思路分析

一、Cron介绍 1、定义 crontab为Linux下的计划任务程序&#xff0c;对应的服务为crond。crond是一个守护进程&#xff0c;每分钟会定期检查是否有要执行的任务&#xff0c;如果有要执行的任务&#xff0c;则自动执行该任务。Linux系统上面原本就有非常多的计划性工作&#xff…

公众号文章的制作方法和步骤分享,纯干货!

无论是个人还是企业&#xff0c;都需要通过公众号来传递自己的声音和价值。如何制作一篇高质量的公众号文章呢&#xff1f;本文伯乐网络传媒将详细介绍公众号文章的制作方法和步骤。 一、文章类型概述 1. 图文教程&#xff1a;以图文结合的方式&#xff0c;向读者传授知识和技…

【详细介绍下火绒安全】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

长波热红外应用

长波热红外通常是指波长范围在8至14微米之间的红外辐射。这种红外辐射主要来自于物体的热能&#xff0c;因此也称为热红外辐射。相比于短波红外&#xff0c;长波热红外更适合用于测量和探测物体的温度&#xff0c;因为它们能够捕捉到物体辐射的长波长热能&#xff0c;从而提供更…

跨境电商SaaS独立站的真面目...

跨境电商独立站自外贸交易开始&#xff0c;就一直存在&#xff0c;接触过电商的朋友应该都听过&#xff0c;但大部分人仅仅只是停留在听过的阶段&#xff0c;并没有真正的去了解它&#xff1b;独立站&#xff0c;顾名思义就是一个独立的网站&#xff0c;不依附任何平台&#xf…

spring快速搭建聊天AI

官网url: https://spring.io/projects/spring-ai 本文演示的是open AI 1创建java项目 2.拿到AI的key&#xff08;没有的话可以去淘宝花几块钱买一个&#xff09; //YOUR_API_KEY写你自己的open AI的key spring.ai.openai.api-keyYOUR_API_KEY spring.ai.openai.chat.options.…

【MATLAB源码-第15期】基于matlab的MSK的理论误码率与实际误码率BER对比仿真,采用差分编码IQ调制解调。

1、算法描述 在数字调制中&#xff0c;最小频移键控&#xff08;Minimum-Shift Keying&#xff0c;缩写&#xff1a;MSK&#xff09;是一种连续相位调制的频移键控方式&#xff0c;在1950年代末和1960年代产生。[1] 与偏移四相相移键控&#xff08;OQPSK&#xff09;类似&…

Pygame经典游戏:贪吃蛇

------------★Pygame系列教程★------------ Pygame经典游戏&#xff1a;贪吃蛇 Pygame教程01&#xff1a;初识pygame游戏模块 Pygame教程02&#xff1a;图片的加载缩放旋转显示操作 Pygame教程03&#xff1a;文本显示字体加载transform方法 Pygame教程04&#xff1a;dra…

IP归属地在电商行业中的重要性

IP归属地在电商行业中的应用十分广泛且深入&#xff0c;其重要性不容忽视。它不仅是用户身份验证和地理位置识别的重要手段&#xff0c;还在个性化推荐、库存管理、物流优化以及欺诈检测等多个方面发挥着关键作用。 首先&#xff0c;IP归属地用于身份验证和安全控制。在电商交易…

HCIP-Datacom H12-831 题库补充(4/12)

2024年 HCIP-Datacom&#xff08;H12-831&#xff09;最新题库&#xff0c;完整题库请扫描上方二维码&#xff0c;持续更新。 以下关于OSPF Sham Link的描述&#xff0c;错误的是哪一项&#xff1f; A&#xff1a;为了使VPN流量通过MPLS VPN骨干网转发&#xff0c;Sham Link的路…

44.HarmonyOS鸿蒙系统 App(ArkUI)栅格布局介绍

栅格布局是一种通用的辅助定位工具&#xff0c;对移动设备的界面设计有较好的借鉴作用。主要优势包括&#xff1a; 提供可循的规律&#xff1a;栅格布局可以为布局提供规律性的结构&#xff0c;解决多尺寸多设备的动态布局问题。通过将页面划分为等宽的列数和行数&#xff0c;…

制造行业项目管理系统哪家好?找企智汇项目管理系统

企智汇项目管理系统是一款非常适合制造业使用的项目软件。它提供了从项目立项、计划制定、进度管理、物料管理到项目结项的全过程管理&#xff0c;帮助企业高效地管理各个项目&#xff0c;确保项目按时、按质量完成。以下是企智汇项目管理系统的一些核心特点&#xff1a; 1.项…

【火猫TV】DOTA2:XG战队击败Falcons夺得精英联赛冠军!

1、在4月15号凌晨结束的精英联赛总决赛上,中国XG战队以3-1击败Falcons战队成功夺冠!恭喜XG战队!同时这也是继ESL One吉隆坡站和喀山未来运动会后,中国战队在2023~2024赛年获得的第三个国际赛事冠军! 2、XG战队选手XinQ在击败Falcons战队,夺得精英联赛冠军后接受采访时表示:因为…

【算法基础】插入排序与二分查找、升级二分查找

文章目录 1. 插入排序1.1 插入排序的思想1.2 插入排序的实现 2. 普通二分查找2.1 普通二分查找的思想2.2 普通二分查找的实现 3. 升级二分查找3.1 升级二分查找思想3.2 升级二分查找实现 1. 插入排序 1.1 插入排序的思想 插入排序很类似于已有一副有序的扑克牌&#xff0c;不断…

大模型日报|今日必读的3篇大模型论文

大家好&#xff0c;今日必读的大模型论文来啦&#xff01; 1.只需半天&#xff0c;训练一个15亿参数小模型 德州大学奥斯汀分校团队研究了一种基于现有大型基础语言模型开发小型基础语言模型的简单方法的有效性&#xff1a;首先从大型语言模型中继承几个 transformer 块&…

如何在Linux系统部署Joplin笔记并结合内网穿透实现无公网IP远程访问

文章目录 1. 安装Docker2. 自建Joplin服务器3. 搭建Joplin Sever4. 安装cpolar内网穿透5. 创建远程连接的固定公网地址 Joplin 是一个开源的笔记工具&#xff0c;拥有 Windows/macOS/Linux/iOS/Android/Terminal 版本的客户端。多端同步功能是笔记工具最重要的功能&#xff0c;…