Spring Boot中使用validator如何实现接口入参自动检验

文章目录

  • 一、背景
  • 二、使用
  • 三、举例

一、背景

在项目开发过程中,经常会对一些字段进行校验,比如字段的非空校验、字段的长度校验等,如果在每个需要的地方写一堆if else 会让你的代码变的冗余笨重且相对不好维护,如何更加规范和优雅的校验呢?

Spring Boot中可以使用Validation Api和Hibernate Validator实现接口入参自动检验。

二、使用

1、如果成员变量是其他对象实体,该变量必须加 ​​@Valid​​,否则嵌套中的验证不生效

2、添加依赖:Spring Boot项目工程依赖,因为在spring-boot-starter-web中已经包含了validation-api和hibernate-validator,所以无需再额外引用

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.5</version><relativePath/>
</parent><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

Maven项目工程依赖maven

  <dependency><groupId>jakarta.validation</groupId><artifactId>jakarta.validation-api</artifactId></dependency>

3、首先需要了解javax.validation下的三个非空约束注解的作用位置:@NotNull、@NotEmpty、@NotBlank

约束说明
@NotNull作用在Integer上(包括其它基础类),在Integer属性上加上@NotNull约束后,该属性不能为null,没有size的约束;@NotNull作用在Collection、Map或者集合对象上,该集合对象不能为null,但可以是空集,即size=0(一般在集合对象上用@NotEmpty约束)
@NotBlank只作用在String上,在String属性上加上@NotBlank约束后,该属性不能为null且trim()之后size>0
@NotEmpty@NotEmpty 作用在集合类上面,在Collection、Map、数组上加上@NotEmpty约束后,该集合对象是不能为null的,并且不能为空集,即size>0

三、举例

Controller类:

public class CustomerSyncController {/*** 客户同步*/@ApiOperation(value = "客户同步")@PostMapping(value = "/customer/sync")public Result<Boolean> syncCustomerInfo(@RequestBody @Valid CustomerInfoVo paramVos) {try {if (!ObjectUtils.isEmpty(paramVos)) {customerInfoService.syncCustomerInfo(paramVos);}} catch (Exception e) {e.printStackTrace();log.error("[syncCustomerInfo] request error,paramVos:{},异常:{}", paramVos, e.getMessage());return Result.error(BasicCodeMsg.SERVER_ERROR);}return Result.success(Boolean.TRUE);}
}

实体类:

@NoArgsConstructor
@Data
public class CustomerInfoVo implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "客户id")@NotBlank(message = "客户ID不能为空")private String customerId;@ApiModelProperty(value = "客户姓名")@NotBlank(message = "客户姓名不能为空")private String name;@ApiModelProperty(value = "证件类型")@NotNull(message = "证件类型不能为空")private Integer certificateType;@ApiModelProperty(value = "证件号")@NotBlank(message = "证件号不能为空")private String certificate;}

用postman测试即可。
在这里插入图片描述

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

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

相关文章

Vue3 用父子组件通信实现页面页签功能

一、大概流程 二、用到的Vue3知识 1、组件通信 &#xff08;1&#xff09;父给子 在vue3中父组件给子组件传值用到绑定和props 因为页签的数组要放在父页面中&#xff0c; data(){return {tabs: []}}, 所以顶部栏需要向父页面获取页签数组 先在页签页面中定义props用来接…

【仿写tomcat】五、响应静态资源(访问html页面)、路由支持以及多线程改进

访问html页面 如果我们想访问html页面其实就是将本地的html文件以流的方式响应给前端即可&#xff0c;下面我们对HttpResponseServlet这个类做一些改造 package com.tomcatServer.domain;import com.tomcatServer.utils.ScanUtil;import java.io.IOException; import java.io…

马哈鱼数据血缘工具背后的项目: gsp_demo_java 项目简单介绍与使用

0.背景 马哈鱼数据血缘工具(https://www.sqlflow.cn/)是SQLflow工具的中文译名,实际就是sqlflow. 对于SQL flow来说,底层调用的是General SQL Parser(GSP https://sqlparser.com) 的库. 这个gsp有开源的java demo项目:https://github.com/sqlparser/gsp_demo_java 1.快速使用…

4G电力摄像机如何通过AT指令对接到国网平台呢?

对于针对电网安全运行的迫切需求&#xff0c;”输电线路智能可视化监测系统”被研发并应用&#xff0c;通过视频监控和AI智能分析技术&#xff0c;实现了对输电线路远程视频在线监测、外力破坏智能分析&#xff0c;可实现对输电线路的全天候实时监测和预警&#xff0c;有效保障…

阿里云ECS服务器企业级和共享型介绍_企业级常见问题解答FAQ

阿里云企业级服务器是什么&#xff1f;企业级和共享型有什么区别&#xff1f;企业级服务器具有独享且稳定的计算、存储、网络资源&#xff0c;如ECS计算型c6、通用型g8等都是企业级实例&#xff0c;阿里云百科分享什么是企业级云服务器、企业级实例的优势、企业级和共享型云服务…

vue3跳转页面后 海康监控实例不销毁

第一个页面是这样的 跳转到新的页面 只有海康的监控没有消失 使用控制台审查元素也审查不到 解决方法&#xff1a;在vue3的销毁周期把海康的监控销毁掉 import { reactive, onDeactivated} from "vue"; const state reactive({oWebControl: null as any, //监控绑…

kafka晋升之路-理论+场景

kafka晋升之路 一&#xff1a;故事背景二&#xff1a;核心概念2.1 系统架构2.2 生产者&#xff08;Producer&#xff09;2.2.1 生产者分区2.2.2 生产者分区策略 2.3 经纪人&#xff08;Broker&#xff09;2.3.1 主题&#xff08;Topic&#xff09;2.3.2 分区&#xff08;Partit…

攻防世界-warmup

原题解题思路 只有一张图片&#xff0c;就查看源代码&#xff0c;有一个source.php。 查看source.php&#xff0c;白名单中还有一个hint.php。 hint.php告诉我们flag的位置ffffllllaaaagggg 但是直接跳转是没用的&#xff0c;构造payload。 http://61.147.171.105:55725/sourc…

linux部署kafka3.5.1(单机)

一、下载jdk17 kafka3.x版本需要jdk11以上版本才能更好的兼容&#xff0c;jdk11、jdk17都是LTS长期维护版本&#xff0c;而且jdk17支持springboot3.x,所以我选择了openjdk17。 下载地址: Archived OpenJDK GA Releaseshttps://jdk.java.net/archive/ 二、上传jdk安装包解压 …

Netty为什么高效,为什么这么受欢迎?

文章目录 前言Netty 解决的问题简化网络编程粘包和拆包 高性能的设计多线程调度零拷贝 总结 前言 上篇文章通过 Java NIO 的处理流程与 Netty 的总体流程比较&#xff0c;并结合 Netty 的源码&#xff0c;可以更加清晰地理解Netty。本文将结合源码详细解析Netty的高效和强大功…

spring源码分析bean的生命周期(下)

doGetBean()执行过程 createBean()执行过程 一、DependsOn注解 spring创建对象之前会判断类上是否加了DependsOn注解&#xff0c;加了会遍历然后会添加到一个map中&#xff0c;spring会先创建DependsOn注解指定的类 二、spring类加载器 在合并BeanDefinition&#xff0c;确定…

【校招VIP】java语言类和对象之map、set集合

考点介绍&#xff1a; map、set集合相关内容是校招面试的高频考点之一。 map和set是一种专门用来进行搜索的容器或者数据结构&#xff0c;其搜索效率与其具体的实例化子类有关系。 『java语言类和对象之map、set集合』相关题目及解析内容可点击文章末尾链接查看&#xff01; …