Spring Boot作为一个流行的Java框架,提供了多种参数校验的方式。 了不起将介绍Spring Boot中参数校验的多种实现方式,并比较它们的优缺点。...Spring Boot参数校验的基本原理 在Spring Boot中,参数校验是通过JSR 303规范的Bean Validation实现的。...当请求到达控制器方法时,Spring Boot会自动根据定义的校验规则执行校验操作,并返回校验结果。 2.1. 导入必需的包 在使用参数校验功能时,我们需要导入相关的依赖包。...复杂逻辑的参数校验 有时候,我们需要对多个字段进行复杂的逻辑校验,例如需要两个字段相互比较或执行自定义的校验逻辑。 在这种情况下,我们可以使用自定义的校验器(Validator)来实现。...控制器中的参数校验 在Spring Boot中,我们可以在控制器中使用参数校验来验证请求中的参数。
4.使用 由于spring-boot-starter-web(springboot 2.3以下版本)依赖默认集成了Hibernate Validator,所以无需添加任何依赖和相关配置,只需要在项目中引入... org.springframework.boot spring-boot-starter-web参数,用于获取校验结果(将校验结果封装在BingdingResult对象中,不会抛出异常) 注意:@Valid 和 BindingResult 是一一对应的,如果有多个...包里面的异常,实体对象前加@RequestBody注解,抛出的异常为该类异常 //方法参数如果带有@RequestBody注解,那么spring mvc会使用RequestResponseBodyMethodProcessor...//校验方法参数 public String queryUserName(@NotNull(message = "用户参数不能为空") User user){ return
并且,本文示例项目使用的是目前最新的 Spring Boot 版本 2.4.5!...Spring Boot 框架来做开发。...基于 Spring Boot 的话,就比较简单了,只需要给项目添加上 spring-boot-starter-web 依赖就够了,它的子依赖包含了我们所需要的东西。...Spring Boot 2.3 1 之后,spring-boot-starter-validation 已经不包括在了 spring-boot-starter-web 中,需要我们手动加上!...sex 值不在可选范围 Validator 编程方式手动进行参数验证 某些场景下可能会需要我们手动校验并获得校验结果。
示例代码:spring-validation-demo: SpringBootValidation Demo (gitee.com)引入依赖想要完成上述所说的参数校验,我们需要一个核心依赖:spring-boot-starter-validation...✈ 空值检查注解说明@NotBlank用于字符串,字符串不能为null 也不能为空字符串@NotEmpty字符串同上,对于集合(Map,List,Set)不能为空,必须有元素@NotNull不能为 null...参数校验接下来开始体验 Spring Boot Validation。...@Valid private ClassInfo classInfo; }复制代码再使用 postman 测试一次 分组校验此外还可以使用分组校验,令一组方法对某些字段校验,而令一组方法对其他字段校验...总结在实际开发中,我们可以使用 Spring Boot Validation 提供的注解进行参数校验,提高代码的可读性,避免编写大量的 if-else 代码块和重复的校验语句。
类似这样的工具类还很多,比如spring也提供了一个名为Assert的断言工具类,在开发的时候,可以直接使用!...以 Spring Boot 工程为例,下面我们一起来看看具体的实践方式。...-- spring boot web --> org.springframework.boot spring-boot-starter-web...Hibernate Validator 提供的校验注解 但是某些情况,例如性别这个参数,可能需要我们自己去手动验证。...本文主要围绕在 Spring Boot 中实现参数统一验证进行相关的知识总结和介绍,如果有描述不对的地方,欢迎留言支持。 示例代码:spring-boot-example-valid
比如,开发一个用户注册接口,需要校验以下条件: 用户名不能为空,长度在 3 到 20 个字符之间; 密码不能为空,长度至少为 8 个字符; 年龄必须是正整数,不能超过 120; 邮箱必须符合标准格式。...接下来我们就从传统的参数校验入手,看看问题出在哪,然后再聊聊 Spring Boot 中如何优雅地实现参数校验,希望对你会有所帮助。...二、Spring Boot 的参数校验机制 在 Spring Boot 中,我们可以使用 Hibernate Validator(Bean Validation 的参考实现)来实现参数校验。...; } } 注意这里的 @Valid 注解,它的作用是告诉 Spring:对请求参数进行校验。 2....在 Spring Boot 中,通过使用 Hibernate Validator 提供的注解,配合分组校验、自定义校验和统一异常处理。 我们可以轻松实现简洁、高效、可扩展的参数校验机制。
下面我会通过实例程序演示如何在 Java 程序中尤其是 Spring 程序中优雅地的进行参数验证。...Spring Boot 程序的话只需要spring-boot-starter-web 就够了,它的子依赖包含了我们所需要的东西。...Spring 去校验方法参数。...一定一定不要忘记在类上加上 Validated 注解了,这个参数可以告诉 Spring 去校验方法参数。...; 使用验证组 某些场景下我们需要使用到验证组,这样说可能不太清楚,说简单点就是对对象操作的不同方法有不同的验证规则,示例如下(这个就我目前经历的项目来说使用的比较少,因为本身这个在代码层面理解起来是比较麻烦的
有时候你女朋友一个眼神你就知道她想要干什么。所以Spring Boot 有一个“约定大于配置”的规则,让程序组件之间来减少配置,降低复杂性。...3.2.1 Properties配置 一般配置参数都是在Spring Boot 的application.yml中。我们会定义一个前缀标识来作为名称空间隔离各个组件的参数。...我们的sms-spring-boot会作如下配置: ? 以上以阿里云的短信功能为例作配置,在将来使用时只需要在application.yml中加入上面对应SmsProperties的配置: ?...在autoconfigure资源包下新建META-INF/spring.factories写入SmsAutoConfiguration全限定名。 ? 多个配置类逗号隔开,换行使用反斜杠。...3.3 sms-spring-boot-starter 该模块是一个空jar。它唯一目的是提供必要的依赖项来使用starter。你可以认为它就是集成该starter功能的唯一入口。
如下图所示: LoginBo @Data public class LoginBo { /** * 账户名 */ @NotBlank(message = "账户名称不能为空...配置文件 ❝ 这里其实是使用了 Spring Boot 提供的国际化支持来配置多语言提示语。...❞ 中文配置文件:messages_zh_CN account.name=账户名称不能为空 password=密码不能为空 英文配置文件:messages_en_US account.name=account...如果您在操作系统中设置了特定的默认语言,那么 Spring Boot 应用程序将使用该默认语言作为默认的 Locale。如果操作系统没有明确设置默认语言,那么它可能会使用 JVM 的默认语言设置。...ResourceBundle 会根据 Spring Boot 获取到 Locale 选择来匹配资源文件。
0x01:Spring Validation 验证框架 Spring Validation 验证框架对参数的验证机制提供了@Validated (Spring's JSR-303 规范,是标准 JSR...可注解位置 :可以用在类型、方法和方法参数上。...@Valid 分组:无分组功能 可注解位置:可以用在方法、构造函数、方法参数和成员属性上(两者是否能用于成员属性上直接影响能否提供嵌套验证的功能) 嵌套验证:用在方法入参上无法单独提供嵌套验证功能;能够用在成员属性上...@Validated 注解,然后使用的 JSON 格式数据提交 创建参数 Vo 类 BaseVo.java public class BaseVo implements Serializable{...public void setQuery(String query) { this.query = query; } } 主要在查询条件字段添加注解 @NotEmpty,标识不能为空
并且,本文示例项目使用的是目前最新的 Spring Boot 版本 2.4.5!...不过,相信大家都是使用的 Spring Boot 框架来做开发。...Spring Boot 2.3 1 之后,spring-boot-starter-validation 已经不包括在了 spring-boot-starter-web 中,需要我们手动加上! ?...输出结果如下: name 不能为空 sex 值不在可选范围 Validator 编程方式手动进行参数验证 某些场景下可能会需要我们手动校验并获得校验结果。...输出结果如下: sex 值不在可选范围 name 不能为空 自定以 Validator(实用) 如果自带的校验注解无法满足你的需求的话,你还可以自定义实现注解。
背景 最近因为某些原因, 需要对原来项目中通过注解实现的参数校验进行升级. 改为使用分组进行校验, 区分增删改查....所以决定还是将SpringBoot参数校验的各种正确使用方式系统的总结一下, 以供后续自己和他人使用. 介绍 SpringBoot参数校验网上已经有很多了, 我这里不详细说明了....就简单介绍下两注意三步骤 注意: springboot 2.3之前的集成在spring-boot-starter-web里了,所以不需要额外引入包 springboot 2.3之后需要引入 spring-boot-starter-validation...大致的使用步骤有三个步骤: pom文件中加入相关启动器 org.springframework.boot spring-boot-starter-validation...我们就可以通过对应属性校验注解的groups参数指定参数校验生效的范围, 值为上面的接口(可以为多个).
集成到Spring MVC:在Spring MVC中,可以使用@Valid或@Validated注解配合BindingResult对象来捕获和处理校验错误,通常在控制器方法的参数中使用。...数据校验国际化相关输出内容配置化,如下messages_zh_CN.propertiesmessage.id.not.empty=ID不能为空message.username.not.empty=用户名不能为空...具体可以查看官方issuehttps://github.com/spring-projects/spring-boot/pull/17530如果我们想要在2.5.x版本以及之前,使用Spring Boot...系列文件的中的国际化属性, * 且中文需要进行ASCII转码才可正确显示,Spring Boot 2.6.x版本之后已支持验证注解message属性引用Spring Boot自身国际化配置。...,"success":false}在我们实际开发中,前端通过header传递国际化语言可能不大方便,有时候我们会直接把传递的语言放在url的请求参数中,形如BASE_URL + "user/save?
: param:指定请求request 中必须包含某些参数,否则不处理该方法; header:指定请求request 中必须包含某些指定的header 值,否则不处理该方法; value:...Boot 自动配置注解,其会根据项目中添加的依赖自动配置Spring 应用;比如Spring Boot 自动配置内嵌tomcat 的端口为8080;还有自动载入应用程序所需的所有Bean,这依赖于Spring...组件,包括有@Configuration 注解标注的类;开发中经常使用@ComponentScan 注解搜索Beans,并结合@Autowired 注解将Beans 注入,若没有进行配置,则Spring...VEHIVLE_TOPIC}") private String VEHIVLE_TOPIC; @inject @inject 注解作用与@Autowired 相同,不同的是其没有require 属性,强制要求注入不能为空...@Qualifier @Qualifier 注解用于当有多个同一类型的Bean 时,通过@Qualifier(“name”) 根据名字来指定注入的Bean;其需要配合@Autowired 使用,根据名字进行注入
使用 Spring Boot 很容易创建一个独立运行(运行 Jar,内嵌 Servlet 容器)准生产级别的基于 Spring 框架的项目,使用 Spring Boot 你可以不用或者只需很少的 Spring...:spring-boot-starter:${spring_boot_version}" //排除tomcat使用undertow compile("org.springframework.boot...condition == null || condition.getOperation() == null) { throw new BaseException("操作符不能为空...extends ServiceImpl { } 15 、controller 控制层主要实现CURD,增加,修改,查询,删除、分页无大常规操作接口操作 用户分页,参数有多个使用下标索引进行处理...userMapper.selectById(userId); System.out.println(JSON.toJSON(user)); } /** * 用户分页,参数有多个使用下标索引进行处理
Spring Boot 参数校验 前言 搭建springboot项目,我们都是采用的Restful接口,那么问题来了,当前端调用接口或者是其他项目调用时,我们不能单一靠调用方来控制参数的准确性,自己也要对一些非空的...方案 按照我们以往的做法,都是对request中的参数一个一个进行非空判定。...多,相对维护起来就不是那么方便,其次增加controller层的负担,既然我们来到spring4 的时代,就应该适应使用注解的趋势,下面是使用注解后的比变化。...boot 版本是2.3.1或者更高,此时的spring boot 已经不在内置验证。...boot修改为2.1.1均可以解决此问题 org.springframework.boot spring‐boot‐starter‐web
@Component :通用的注解,可标注任意类为 Spring 组件。...我现在使用的是 Spring Boot 2.5.2 版本了,所以手动增加依赖: org.springframework.boot...Bean字段验证注解 @NotEmpty 被注释的字符串的不能为 null 也不能为空 @NotBlank 被注释的字符串非 null,并且必须包含一个非空白字符 @Null 被注释的元素必须为 null...NoArgsConstructor public class User { @Min(100) private Long id; @NotNull(message = "name 不能为空...Spring Boot 源码中大量扩展了 @Condition 注解,用于实现智能的自动化配置,满足各种使用场景。
领取专属 10元无门槛券
手把手带您无忧上云