SpringBoot-Validation快速校验

一、引入依赖

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

二、校验注解介绍

限制说明
@NotNull不为null
@NotEmpty①不为null ②字符串或集合长度>0
@NotBlank①只能校验字符串 ②不为null ③字符串去除前后缀空格后仍有内容
@Min限制最小值(整数)
@Max限制最大值(整数)
@Size限制长度在min~max之间
@DecimalMin限制最小值
@DecimalMax限制最大值
@Email对邮箱格式进行校验
@Pattern通过正则表达式进行校验

如果要开始校验规则,需要在接收数据的对象前面加上 @Validated 注解

三、分组校验

组是用 Java接口 来表示的,如下面的 增、删、改、查 四个组:

/**
 * 对校验类型进行分组
 */
public class ValidationGroup {
    public interface Insert {}		//	增
    public interface Delete {}		//	删
    public interface Update {}		//	改
    public interface Select {}		//	查
}

每一个校验的注解上都有group属性,它可以为当前校验规则指定所属组,若不指定则为默认组, 如:

public class Student {
    
    //	默认组
    @NotNull			
    private Long id;
    
    //  新增组、修改组
    @NotEmpty( groups = {ValidationGroup.Insert.class,ValidationGroup.Update.class} )	
    private String name;
}

当激活新增组校验或者修改组校验时,name属性将会进行不为空的校验,激活组校验可以通过@Validated注解的value属性指定

如果不指定激活的组则激活默认组,此时id会进行不为null的校验

@RestController
public class StudentController {
    
    @PostMapping
    public void add(  @Validated(value={ValidationGroup.Insert.class})  //  对新增组字段进行校验
                      @RequestBody	Student student) 
    {
        //	...
    }
}

四、案例

这里我导入了lombok,不想导入也可以手动生成get、set方法、无参、全参构造

校验分组

/**
 * 对校验类型进行分组
 */
public class ValidationGroup {
    public interface Insert {}
    public interface Delete {}
    public interface Update {}
    public interface Select {}
}

校验的实体类

import com.example.config.ValidationGroup;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.*;
import javax.validation.groups.Default;
import java.time.LocalDate;
import java.util.Date;

@AllArgsConstructor
@NoArgsConstructor
@Data
public class Student {

    @NotNull(
            message = "id不能为空",
            groups = {
                    ValidationGroup.Update.class,   //  更新组
                    ValidationGroup.Delete.class,   //  删除组
            })
    private Long id;

    @Size(min = 1,max = 5,message = "姓名长度必须在1~5个字符")
    @NotEmpty(
                message = "姓名不能为空",
                groups = {ValidationGroup.Insert.class} //  新增组
    )
    private String name;

    @Min(   value = 0,message = "年龄必须>=0",
            groups = ValidationGroup.Insert.class
    )          //  新增组
    @Max(
            value = 120,message = "年龄超过了120岁",
            groups = {ValidationGroup.Insert.class}
    )      //  新增组
    private Integer age;

    @Pattern(   regexp = "\\d{4}(\\-|\\/|.)\\d{1,2}\\1\\d{1,2}",message = "生日格式必须是yyyy-MM-dd",
                groups = {ValidationGroup.Insert.class}
    )  //  默认组
    private String birthday;

    @Email(message = "邮箱格式有误",groups = {ValidationGroup.Insert.class})   //  默认组
    private String email;
}

控制层

import com.example.config.ValidationGroup;
import com.example.model.Student;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;

@RestController
@RequestMapping("/student")
public class StudentController {

    @PostMapping
    public String add(@Validated(ValidationGroup.Insert.class)  //  对新增组字段校验
                      @RequestBody Student student) {
        return "添加成功";
    }

    @PutMapping
    public String update(@Validated({ValidationGroup.Update.class})     //  对更新组字段校验
                         @RequestBody Student student) {
        return "更新成功";
    }

    @DeleteMapping
    public String delete(@Validated(value={ValidationGroup.Delete.class})	//  对删除组字段校验
                         @RequestBody Student student) {
        return "删除成功";
    }
}

希望通过SpringBoot的Validation校验能帮助小伙伴们解决大多数校验!

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

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

相关文章

【@ohos.events.emitter (Emitter)】

ohos.events.emitter (Emitter) 本模块提供了在同一进程不同线程间&#xff0c;或同一进程同一线程内&#xff0c;发送和处理事件的能力&#xff0c;包括持续订阅事件、单次订阅事件、取消订阅事件&#xff0c;以及发送事件到事件队列的能力。 说明&#xff1a; 本模块首批接…

实时Linux对EtherCAT工业自动化协议的支持

在自动化技术和工业控制领域&#xff0c;实时通信网络的重要性不断增长。EtherCAT&#xff08;Ethernet for Control Automation Technology&#xff09;作为一种高效的工业以太网通信协议&#xff0c;因其出色的性能和灵活性而广受欢迎。而实时Linux作为影响最为广泛的开源实时…

【Web前端】盒子模型_元素分类_表格

1、盒子模型 1.1简介 CSS盒子模型是在网页设计中经常用到的CSS技术所使用的一种思维模型。包括内容(content)、内边距(padding)、边框(border)、外边距(margin) 1.2边框&#xff08;border&#xff09; 1.2.1简介 边框是环绕内容区和填充的边界。边框的属性有border-style、…

Pytorch 实现情感分析

情感分析 情感分析是 NLP 一种应用场景&#xff0c;模型判断输入语句是积极的还是消极的&#xff0c;实际应用适用于评论、客服等多场景。情感分析通过 transformer 架构中的 encoder 层再加上情感分类层进行实现。 安装依赖 需要安装 Poytorch NLP 相关依赖 pip install t…

免费SSL证书?轻松申请攻略来了!

在当今的互联网时代&#xff0c;网络安全已经成为一个不容忽视的重要课题。随着在线交流和交易活动的增加&#xff0c;保护网站和用户信息的重要性日益突显。SSL证书&#xff0c;即安全套接字层证书&#xff0c;它为互联网通信提供了加密服务&#xff0c;确保数据的安全性和完整…

光伏远动通讯屏的组成

光伏远动通讯屏的组成 远动通讯屏主要用于电力系统数据采集与转发&#xff0c;远动通讯屏能够采集站内的各种数据&#xff0c;如模拟量、开关量和数字量等&#xff0c;并通过远动通讯规约将必要的数据上传至集控站或调度系统。这包括但不限于主变和输电线路的功率、电流、电压等…

怎么设置一天多个时间点的闹钟提醒?

在日常生活中&#xff0c;我们经常需要在一天的不同时间点完成特定的任务&#xff0c;如定时喝水、定时查看后台数据、定时吃药等。这时候&#xff0c;如果能有一款软件&#xff0c;可以在一条日程里轻松设置多个时间点的闹钟提醒&#xff0c;那将大大提高我们的工作效率和生活…

如何理解GTX接收通道相关模块?(高速收发器三)

前文讲解了GTX的时钟及发送通道相关内容&#xff0c;本文讲解GTX接收通道的一些功能及其IP配置&#xff0c;接收往往比发送设计更难&#xff0c;与调制解调&#xff0c;加密解密其实相差不大&#xff0c;后者难度都比前者高出很多。GTX的接收通道的功能相比发送通道更加重要&am…

西奥CHT-01软胶囊硬度测试仪:重塑行业标杆,引领硬度测试新纪元

西奥CHT-01软胶囊硬度测试仪&#xff1a;重塑行业标杆&#xff0c;引领硬度测试新纪元 在当今医药领域&#xff0c;软胶囊作为一种广泛应用的药品剂型&#xff0c;其品质的稳定性和安全性直接关系到患者的健康。而在确保软胶囊品质的各项指标中&#xff0c;硬度测试尤为关键。…

AIGC实战——多模态模型DALL.E 2

AIGC实战——多模态模型DALL.E 2 0. 前言1. 模型架构2. 文本编码器3. CLIP4. 先验模型4.1 自回归先验模型4.2 扩散先验模型 5. 解码器5.1 GLIDE5.2 上采样器 6. DALL.E 2 应用6.1 图像变体6.2 先验模型的重要性6.3 DALL.E 2 限制 小结系列链接 0. 前言 DALL.E 2 是 OpenAI 设计…

领域驱动设计架构演进

领域驱动设计由于其强调对领域的深入理解和关注业务价值,其架构演进依赖于领域的变化和特定领域中的技术实践。 初始阶段 一个单体架构,所有的功能都集成在一个应用程序中,领域模型可能还不完全清晰,甚至并未形成。这个阶段主要是为了验证产品的可行性,快速迭代并尽快推…

有没有国内个人可用的GPT平替?推荐5个AI工具

随着AI技术的快速发展&#xff0c;AI写作正成为创作的新风口。但是面对GPT-4这样的国际巨头&#xff0c;国内很多小伙伴往往望而却步&#xff0c;究其原因&#xff0c;就是它的使用门槛高&#xff0c;还有成本的考量。 不过&#xff0c;随着GPT技术的火热&#xff0c;国内也涌…

2023年度合肥市优秀知识产权服务机构评选申报主体条件、材料和时间程序须知

一、申报主体 在合肥市行政区域内登记注册的知识产权服务机构&#xff0c; 二、申报条件 (一)在合肥市登记注册时间满1年&#xff0c;营业执照经营范围包含知识产权代理、服务等相关内容; (二)在全国专利代理信息公示平台进行备案; (三)有稳定的专业服务人才队伍和服务对象…

【SSL证书】免费单域名SSL证书怎么申请

1、访问证书颁发机构&#xff08;CA&#xff09;&#xff1a;比如JoySSL、ZeroSSL、各大云平台等&#xff0c;这些机构提供免费的SSL证书申请&#xff0c;并支持单域名证书。在网站上注册账号&#xff0c;并根据提示选择单域名证书进行申请。 &#xff01;&#xff01;&#xf…

工厂模式应用实例

引言 设计模式概念 设计模式&#xff08;Design Pattern&#xff09;的官方概念可以表述为&#xff1a;在软件设计中&#xff0c;设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它是针对特定问题或特定场景的解决方案&#xff0c;是一种经过…

使用STM32CubeMX进行STM32F4的定时器配置

目录 1. Pin脚2. 配置2.1 时钟配置2.2 RCC配置2.3 Timer配置2.4 输出文件 3. 代码3.1 使能定时器3.2 回调函数 1. Pin脚 2. 配置 2.1 时钟配置 timer3时钟挂载在APB1上&#xff1a; 时钟配置如下&#xff1a; 外部使用8MHz晶振 开启内部16MHz晶振 使用锁相环 开启最高100MHz。…

揭秘依赖注入:软件开发人员的基本指南

Dependency injection (DI) is a design pattern and programming technique to manage dependencies between different components. 依赖注入&#xff08;DI&#xff09;是一种用于管理不同组件之间依赖关系的设计模式和编程技术。 In DI, the dependencies of a class or ot…

机台统一管理有多困难?但现在出现可行的解决方案了

机台的统一管理对于企业来说对提高生产效率、降低成本、优化资源配置以及保障生产安全等方面都具有至关重要的作用。但企业机台统一管理却存在实际的困难&#xff0c;主要体现在&#xff1a; 多样化的设备和运作模式&#xff1a;由于机台设备可能来自不同的厂商&#xff0c;其规…

如何描述自己的算法?

算法的表达 好的&#xff0c;让我们来一起探讨如何向别人介绍我们的算法。说话很简单&#xff0c;但要把话说清楚&#xff0c;说明白就不那么容易了。同样的道理&#xff0c;能够通俗易懂&#xff0c;直观清晰和严谨地描述一个算法&#xff0c;也是一项具有挑战性的任务。接下…

106短信群发平台在金融和法务行业的应用分析

一、金融行业应用 1.客户通知与提醒&#xff1a;银行、证券、保险等金融机构经常需要向客户发送各类通知和提醒&#xff0c;如账户余额变动、交易确认、扣费通知、理财产品到期提醒等。106短信群发平台可以快速、准确地将这些信息发送到客户的手机上&#xff0c;确保客户及时获…
最新文章