当前位置: 首页 > news >正文

SpringBoot Validation入参校验国际化

在 Spring Boot 中,可以使用 Validation 和国际化来实现对入参的校验。

常用的校验 

@NotNull验证字段值不能为 null
@NotEmpty验证字段值不能为 null 或空字符串
@NotBlank验证字符串字段值不能为空、null,并且必须至少包含一个非空白字符
@Size验证字符串、集合或数组的大小是否在指定范围内
@Min验证数值字段值必须大于等于指定的最小值
@Max验证数值字段值必须小于等于指定的最大值
@Email验证字段值必须是有效的电子邮件地址格式
@Pattern验证字段值必须匹配指定的正则表达式模式
@Past验证日期字段值必须是过去的日期
@Future验证日期字段值必须是将来的日期

引入依赖

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

创建properties文件

安装插件 

创建文件 

添加语言 

添加配置 

语言配置 

非空配置

长度配置 

解决properties文件中文乱码

mode添加注解

@NotBlank 注解用于验证字符串类型字段不为空或不为 null。如果验证失败,则使用 message 属性中定义的错误消息提示用户输入不能为空或 null 值。

@Length 注解用于验证字符串类型字段的长度是否符合指定的范围。如果验证失败,就会使用 message 属性中定义的错误消息提示用户输入的长度非法。

    /*** 学生姓名*/@NotBlank(message = "{name.notBlank}")@Length(min = 2,max = 19,message="{name.length}")private String name;

controller添加注解

@Validated 是 Spring Framework 提供的一个注解,用于在控制器方法级别或类级别上启用方法参数验证,以对请求参数进行验证。

@Valid 是 Java 标准库中的一个注解,它与 Bean Validation 规范(JSR 380)一起使用,用于启用对象级别验证。 

@RestController
@RequestMapping("/test")
@Validated
public class TestController {@PostMapping("/user")public ResponseResult<String> user(@Valid @RequestBody Student student) {return new ResponseResult<>("userToken");}
}

添加异常捕捉

这个类捕获参数异常 

import com.example.demo.util.HttpCodeEnum;
import com.example.demo.util.ResponseResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;import javax.servlet.http.HttpServletRequest;
import java.util.List;@RestControllerAdvice
public class GlobalExceptionHandler {private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);@Autowiredprivate HttpServletRequest httpServletRequest;private final String sysError="系统出错";// get请求的对象参数校验异常@ResponseStatus(HttpStatus.BAD_REQUEST)@ExceptionHandler({MissingServletRequestParameterException.class})public ResponseResult bindExceptionHandler(MissingServletRequestParameterException e) {String requestURI = httpServletRequest.getRequestURI();log.error("请求地址'{}',get方式请求参数'{}'必传", requestURI,e.getParameterName());return ResponseResult.errorResult(HttpCodeEnum.SYSTEM_ERROR.getCode(), e.getMessage());}// post请求的对象参数校验异常@ResponseStatus(HttpStatus.BAD_REQUEST)@ExceptionHandler({MethodArgumentNotValidException.class})public ResponseResult methodArgumentNotValidHandler(MethodArgumentNotValidException e) {String requestURI = httpServletRequest.getRequestURI();log.error("请求地址'{}',post方式请求参数异常'{}'", requestURI, e.getMessage());List<ObjectError> allErrors = e.getBindingResult().getAllErrors();return ResponseResult.errorResult(HttpCodeEnum.SYSTEM_ERROR.getCode(), getValidExceptionMsg(allErrors));}private String getValidExceptionMsg(List<ObjectError> errors) {if(!CollectionUtils.isEmpty(errors)){StringBuilder sb = new StringBuilder();errors.forEach(error -> {if (error instanceof FieldError) {sb.append(((FieldError)error).getField()).append(":");}sb.append(error.getDefaultMessage()).append(";");});String msg = sb.toString();msg = msg.substring(0, msg.length() -1);return msg;}return null;}}

测试

name为空 

name长度不符合 

切换为英文 

相关文章:

SpringBoot Validation入参校验国际化

在 Spring Boot 中&#xff0c;可以使用 Validation 和国际化来实现对入参的校验。 常用的校验 NotNull验证字段值不能为 nullNotEmpty验证字段值不能为 null 或空字符串NotBlank验证字符串字段值不能为空、null&#xff0c;并且必须至少包含一个非空白字符Size验证字符串、…...

树莓集团涉足直播产业园区运营,成都直播产业园区再添黑马

树莓集团涉足成都直播产业园运营领域&#xff0c;这一消息引起了业界的广泛关注。在这个无限可能的直播领域中&#xff0c;树莓集团将与上市公司德商产投紧密合作&#xff0c;立志为成都直播行业的发展注入新的活力。成都天府蜂巢直播产业园推行着一系列创新的政策措施&#xf…...

中小学教师ChatGPT的23种用法

原文&#xff1a;中小学教师ChatGPT的23种用法 近日&#xff0c;ChatGPT引发舆论风暴&#xff0c;火遍全球。作为一款生成式人工智能软件&#xff0c;ChatGPT可以就任何议题生成文本&#xff0c;完成包括回答问题&#xff0c;撰写文章、论文、诗歌在内的多种工作。各界盛赞其“…...

Ubuntu性能分析-ftrace 底层驱动

1、框架介绍 ftrace内核驱动可以分为几部分:ftrace framework,RingBuffer,debugfs,Tracepoint,各种Tracer。 ftrace框架是整个ftrace功能的纽带,包括对内和的修改,Tracer的注册,RingBuffer的控制等等。 RingBuffer是静态动态ftrace的载体。 debugfs则提供了用户空间…...

网盘搜索引擎:点亮知识星空,畅享数字宝藏!

大家好&#xff01;作为一名资深的网络产品运营人员&#xff0c;我今天要向大家介绍一款让你受益匪浅的神奇工具——网盘搜索引擎&#xff01;它可以帮助你免费搜索查询各种云盘共享资源&#xff0c;包括影视作品、纪录片、小说、动漫等等。现在&#xff0c;我们急需网络流量&a…...

Mysql以key-val存储、正常存储的区别

场景 你作为一个服务端工程师&#xff0c;假设产品要求设计这么一个页面&#xff0c;页面上包含很多模块&#xff0c;每个模块都可以单独进行变更&#xff0c;有些模块是富文本。 实现方式有很多&#xff0c;我们来聊比较常用的两种&#xff0c;看看mysql的表如何设计。 第一…...

MySQL 索引优化实践(单表)

目录 一、前言二、表数据准备三、常见业务无索引查询耗时测试3.1、通过订单ID / 订单编号 查询指定订单3.2、查询订单列表 四、订单常见业务索引优化实践4.1、通过唯一索引和普通索引优化通过订单编号查询订单信息4.2、通过普通联合索引优化订单列表查询4.2.1、分析查询字段的查…...

react create-react-app v5配置 px2rem (暴露 eject方式)

环境信息&#xff1a; create-react-app v5 “react”: “^18.2.0” “postcss-plugin-px2rem”: “^0.8.1” 配置步骤&#xff1a; 我这个方式是 npm run eject 暴露 webpack配置的方法 1.安装 postcss-plugin-px2rem 和 lib-flexible cnpm install postcss-plugin-px2rem…...

AVL树的实现及原理

目录 AVL树的由来 AVL的实现原理 左单旋 右单旋 先左后右 先右后左 总结 AVL树的由来 查找&#xff0c;无论在什么情况下都与我们息息相关。在我们学习数组阶段学习到了线性查找&#xff0c;可是它的效率很低下&#xff0c;又演变出来了二分查找&#xff0c;它的效率非常…...

NestJs和Vite使用monorepo管理项目中,需要使用共享的文件夹步骤

NestJs和Vite使用monorepo管理项目中,需要使用共享的文件夹步骤 1 首先需要将nest-cli打包的功能通过webpack接管 nest-cli.json文件内容 {"$schema": "https://json.schemastore.org/nest-cli","collection": "nestjs/schematics",…...

我用PYQT5做的第一个实用的上位机项目(三)

基本的程序框架&#xff1a; 因为自己不是专业的程序员&#xff0c;只是一个搞电气控制的“票友”&#xff0c;所以尽量减少手动输入 代码量&#xff0c;能在Qt Dsigner里面完成的组态就不要放在代码里面完成。 在框架的建设方面&#xff0c;尽量做到集中和整合&#xff0c;位…...

代谢组学分析平台(二)

GC/MS分析生物样本为何要衍生化处理&#xff1f;有哪些衍生化的方法&#xff1f; GC的流动相为气体&#xff08;通常为高纯氦&#xff09;&#xff0c;这就要求被分析物必须能够气化&#xff0c;而生物样本中很多内源性代谢物都含有极性基团&#xff0c;具有沸点高、不易气化特…...

【统计学】Top-down自上而下的角度模型召回率recall,精确率precision,特异性specificity,模型评价

最近在学 logistic regression model&#xff0c;又遇见了几个之前的老面孔。 召回率recall, 精确率precision&#xff0c;特异性spcificity&#xff0c;准确率accuracy&#xff0c;True positive rate&#xff0c;false positive rate等等名词在学习之初遇到的困难在于&#x…...

AutoDL使用tensorboard

目录 一&#xff0c;训练形成log文件 二. 切换logs目录 三&#xff0c;在AutoPanel中访问TensorBoard 一&#xff0c;训练形成log文件 例子&#xff1a; from torch.utils.tensorboard import SummaryWriter import numpy as npwriter SummaryWriter() for x in range(1, …...

代谢组学分析手段(一)

核磁共振技术&#xff08;Nuclear Magnetic Resonance, NMR&#xff09; 定义&#xff1a;指核磁矩不为零的原子核在外磁场的作用下&#xff0c;核自旋能级发生塞曼分裂&#xff0c;共振吸收某一特定频率的射频辐射的物理过程。 优点&#xff1a; &#xff08;1&#xff09;…...

网络基础入门(网络基础概念详解)

本篇文章主要是对网络初学的概念进行解释&#xff0c;可以让你对网络有一个大概整体的认知。 文章目录 一、简单认识网络 1、1 什么是网络 1、2 网络分类 二、网络模型 2、1OSI七层模型 2、1、1 简单认识协议 2、1、2 OSI七层模型解释 2、2 TCP/IP五层(或四层)模型 三、网络传…...

简化任务调度与管理:详解XXL-Job及Docker Compose安装

在现代应用程序开发中&#xff0c;任务调度和管理是至关重要的一部分。XXL-Job是一个强大的分布式任务调度平台&#xff0c;它使得任务的调度和管理变得更加轻松和高效。本文将介绍XXL-Job的基本概念&#xff0c;并详细演示如何使用Docker Compose进行快速安装和配置。 什么是X…...

QByteArray字节数组

QByteArray字节数组 文章目录 QByteArray字节数组1.1 QByteArray类基本使用说明1.2 设置数组字节大小1.3 返回数组大小1.4 将数据转为其他类型1.5 将数据转为C语言的字符指针返回1.6 数组数据追加1.7 清除数组数据为指定值1.8 数组数据插入1.9 删除指定位置指定长度的数据1.10 …...

ubuntu20.04.3中qt程序界面嵌套另一个qt界面

先上代码 #include "mainwindow.h" #include <QApplication> #include <iostream> using namespace std; #ifdef _WIN32// Windows 平台的代码 #include <windows.h> #elif __linux__// Linux 平台的代码// ...#include <X11/Xlib.h> #else…...

【chainlit】使用chainlit部署chatgpt

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…...

资本意志下的工程师生存指南:从高通裁员看技术与商业的博弈

1. 从一封信到四千七百张解雇单&#xff1a;当资本意志敲响工程师的门在科技行业&#xff0c;尤其是半导体这个以创新为生命线的领域&#xff0c;我们常常沉浸于晶体管密度、架构革新和制程竞赛的技术叙事中。然而&#xff0c;2015年夏天&#xff0c;一封来自华尔街的公开信&am…...

ChromaControl终极指南:如何实现多品牌RGB设备统一灯光控制

ChromaControl终极指南&#xff1a;如何实现多品牌RGB设备统一灯光控制 【免费下载链接】ChromaControl 3rd party device lighting support for Razer Synapse. 项目地址: https://gitcode.com/gh_mirrors/ch/ChromaControl 你是否曾为不同品牌的RGB设备需要安装多个控…...

实战指南:VRM-Addon-for-Blender 终极VRM格式导入导出解决方案

实战指南&#xff1a;VRM-Addon-for-Blender 终极VRM格式导入导出解决方案 【免费下载链接】VRM-Addon-for-Blender VRM Importer, Exporter and Utilities for Blender 2.93 to 5.1 项目地址: https://gitcode.com/gh_mirrors/vr/VRM-Addon-for-Blender VRM&#xff08…...

C语言--day14

指针的常见操作 指针变量&#xff0c;有两方面的意思 一个指针指向的内容(数据值&#xff0c;一级) 指针变量本身存储的数据 (地址值) #include <stdio.h> int main() {int a 10;int b 0 ;int c 50;int *p NULL;int *q NULL;p &a; // 对指针变量本身进行修改…...

Picotron实战案例:在8个H100 GPU上训练SmolLM-1.7B模型的完整指南

Picotron实战案例&#xff1a;在8个H100 GPU上训练SmolLM-1.7B模型的完整指南 【免费下载链接】picotron Minimalistic 4D-parallelism distributed training framework for education purpose 项目地址: https://gitcode.com/gh_mirrors/pi/picotron Picotron是一个极简…...

深入解析session-guardian:分布式会话并发安全与生命周期管理实践

1. 项目概述与核心价值最近在折腾一个分布式系统的监控项目&#xff0c;遇到了一个挺典型的问题&#xff1a;用户会话&#xff08;Session&#xff09;在集群环境下频繁丢失&#xff0c;导致用户体验断崖式下跌。排查了一圈&#xff0c;从负载均衡策略到Redis集群配置&#xff…...

【Midjourney Tempera风格终极指南】:20年AI绘画专家亲授3大参数黄金配比与5类易踩翻车点

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Tempera风格的本质解构与历史溯源 Tempera&#xff08;蛋彩画&#xff09;作为一种古老而精密的绘画媒介&#xff0c;其技术逻辑与现代前端渲染范式存在深层隐喻关联——尤其在“分层合成”“介质绑定”…...

Shell脚本错误处理实战:用sh-guard提升Bash脚本健壮性

1. 项目概述&#xff1a;一个为Shell脚本穿上“防护服”的守护者在Linux运维、自动化部署乃至日常的系统管理工作中&#xff0c;Shell脚本是我们最得力的助手。从简单的日志清理到复杂的CI/CD流水线&#xff0c;Shell脚本无处不在。然而&#xff0c;脚本的健壮性却常常被忽视。…...

1.7.3 掌握Scala函数 - 神奇占位符

本次Scala函数实战主要聚焦于“神奇占位符”下划线&#xff08;_&#xff09;的灵活运用&#xff0c;通过三个递进的案例深入理解其简化代码的核心作用。 演示过滤列表&#xff1a;利用 filter 方法&#xff0c;对比了常规匿名函数与使用占位符的写法&#xff0c;直观展示了如何…...

无国界技术创业:构建全球化产品支持与远程协作体系

1. 从“车库”到“云端”&#xff1a;无国界创业的底层逻辑变迁 十年前&#xff0c;如果你在硅谷创立一家芯片设计工具&#xff08;EDA&#xff09;或嵌入式软件公司&#xff0c;头两年的客户拜访路线图大概就是101号公路沿线。工程师可以早上开车去圣何塞的客户办公室&#xf…...