validator 对象校验,自定义校验实现

一、导入validator工具需要的jar包

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>4.1.0.Final</version>
        </dependency>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>2.0.1.Final</version>
        </dependency>

二、校验工具,默认hibernate

Validator validator = Validation.byProvider(HibernateValidator.class)
                .configure().buildValidatorFactory().getValidator();

三、校验对象 pojo


    @NotBlank(message = "englishName 不能为空")
    private String englishName;


        EnglishNoCareDto englishNoCareDto = new EnglishNoCareDto();
        Set<ConstraintViolation<EnglishNoCareDto>> validate = validator.validate(englishNoCareDto);
        for (ConstraintViolation<EnglishNoCareDto> englishNoCareDtoConstraintViolation : validate) {
            String message = englishNoCareDtoConstraintViolation.getMessage();
            System.out.println(message);
        }

四、效果展示

五、常用注解
@Nul    被注释的元素必须为 null        
@NotNull    被注释的元素必须不为 null    @NotNull 用在基本类型上    
@AssertTrue    被注释的元素必须为 true        
@AssertFalse    被注释的元素必须为 false        
@Min(value)    被注释的元素必须是一个数字,其值必须大于等于指定的最小值        
@Max(value)    被注释的元素必须是一个数字,其值必须小于等于指定的最大值        
@DecimalMin(value)    被注释的元素必须是一个数字,其值必须大于等于指定的最小值        
@DecimalMax(value)    被注释的元素必须是一个数字,其值必须小于等于指定的最大值        
@Size(max, min)    被注释的元素的大小必须在指定的范围内,元素必须为集合,代表集合个数    
@Pattern(regexp = )    正则表达式校验        
@Digits (integer, fraction)    被注释的元素必须是一个数字,其值必须在可接受的范围内        
@Past    被注释的元素必须是一个过去的日期        
@Future    被注释的元素必须是一个将来的日期        
@Email    被注释的元素必须是电子邮箱地址        
@Length(min=, max=)    被注释的字符串的大小必须在指定的范围内,必须为数组或者字符串,若微数组则表示为数组长度,字符串则表示为字符串长度        
@NotEmpty    被注释的字符串的必须非空    @NotEmpty 用在集合类上面    
@Range(min=, max=)    被注释的元素必须在合适的范围内        
@NotBlank    被注释的字符串的必须非空  

六、自定义注解校验

package com.bu.fourLevel.inter;

import org.apache.commons.lang3.StringUtils;

import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author haizhuangbu
 * @date 2024/2/1 16:51
 * @mark NotIsZs
 */
// 自定义校验注解必须添加的注解
@Constraint(
        validatedBy = {NotIsZs.NotIsZsImpl.class}
)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
public @interface NotIsZs {

    String message() default "{com.bu.fourLevel.inter.NotIsZs}";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};


    class NotIsZsImpl implements ConstraintValidator<com.bu.fourLevel.inter.NotIsZs, String> {

        // 获取校验注解中的内容
        @Override
        public void initialize(NotIsZs constraintAnnotation) {
            ConstraintValidator.super.initialize(constraintAnnotation);
        }
        
        
        // 校验规则
        @Override
        public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
            if (StringUtils.isBlank(s)) return Boolean.TRUE;
            if (s.equals("ZS")) return false;
            return false;
        }
    }


}

七、自定义注解实现效果

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

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

相关文章

SketchBook 2022下载安装教程,保姆级教程,操作简单,小白也能轻松搞定,附安装包和工具

前言 Autodesk SketchBook是一款新一代的自然画图软件&#xff0c;软件界面新颖动人&#xff0c;功能强大&#xff0c;仿手绘效果逼真&#xff0c;笔刷工具分为铅笔&#xff0c;毛笔&#xff0c;马克笔&#xff0c;制图笔&#xff0c;水彩笔&#xff0c;油画笔&#xff0c;喷枪…

原来你的Windows自带沙盒功能!

什么是Windows沙盒&#xff1f; Windows沙盒是一种虚拟化技术&#xff0c;允许用户在安全隔离的环境中运行不受信任的应用程序。它是Windows 10操作系统的一个特性&#xff0c;旨在提高系统的安全性&#xff0c;防止潜在的威胁对主系统造成影响。 启用Windows沙盒 确保系统满…

【TCP】流量控制和拥塞控制

前言 TCP&#xff08;传输控制协议&#xff09;是互联网协议&#xff08;IP&#xff09;网络传输层协议&#xff0c;负责控制数据包的顺序和流量控制&#xff0c;以防止网络拥塞和数据丢失。TCP流量控制和拥塞控制是确保网络有效通信的重要机制。具体分析如下&#xff1a; 流…

单细胞scRNA-seq测序基础知识笔记

单细胞scRNA-seq测序基础知识笔记 scRNA-seq技术scRNA-seq 分析流程数据预处理聚类标准化数据筛选有用的数据数据降维聚类 Clustering 注释细胞类型 scRNA数据分析结尾 该笔记来源于 B站up 江湾青年 scRNA-seq技术 首先是如何测序&#xff0c;上图瓶中有很多细胞&#xff0c;…

AD24-原理图与PCB交互设置及PCB常用快捷键汇总

一、原理图与PCB交互设置 1、在原理图页&#xff0c;工具-交叉选择模式 2、设置完成后。在原理图页选择器件&#xff0c;然后再PCB页也会相应被选中 3、一般将网络与Pin脚的勾去掉 4、整齐排列 5、TC&#xff1a;查找网络、器件、Pin脚 二、PCB常用快捷键汇总

高效远控管理 向日葵企业版统计报表与自动分组解析

高效远控管理&#xff01;向日葵企业版统计报表与自动分组解析企业之所以引入商用远程控制方案&#xff0c;一个很大的因素就是因为需要对高频率、多设备的远程控制需求以及IT设备本身进行高效管理&#xff0c;因此一款优质的商用远程控制方案势必需要在这些方面搭载足够完善的…

idea查看日志的辅助插件 --- Grep Console (高亮、取消高亮)

&#x1f680; 分享一款很有用的插件&#xff1a;Grep Console &#x1f680; 我们在查看日志的时候可能会有遗漏&#xff0c;使用这款插件可以让特定的关键词高亮&#xff0c;可以达到不遗漏的效果&#xff01; 如果你是一个开发者或者对日志文件分析感兴趣&#xff0c;不要…

MySQL原理(四)索引(3)索引失效与索引区分度

一、索引失效&#xff1a; 首先未使用索引列作为查询条件索引是肯定会生效的&#xff0c;还有其他的情况&#xff0c;索引列做为了查询条件也失效了&#xff1a; ALTER TABLE staffs ADD INDEX idx_staffs_nameAgePos(NAME, age, pos); 1、select 语句、order by语句&#xf…

x2openEuler 升级实操(centos7.8 to openEuler 20.03)

通过 x2openEuler 工具&#xff0c;将 centos 7.8 迁移至 OpenEuler 上&#xff0c;实际感受迁移过程。x2openEuler https://docs.openeuler.org/zh/docs/20.03_LTS_SP1/docs/x2openEuler/x2openEuler.html 环境准备 下载 x2openEuler 安装包 wget https://repo.oepkgs.net/o…

Nicn的刷题日常之带空格直角三角形图案

1.题目描述 描述 KiKi学习了循环&#xff0c;BoBo老师给他出了一系列打印图案的练习&#xff0c;该任务是打印用“*”组成的带空格直角三角形图案。 输入描述&#xff1a; 多组输入&#xff0c;一个整数&#xff08;2~20&#xff09;&#xff0c;表示直角三角形直角边的长度&am…

Linux 指令

Linux 指令 1 登入/登出1.1 关机1.2 重启1.3 切用户 2 文件和目录管理2.1 目录操作2.2 文件操作2.3 文件内容操作2.4 归档及压缩 3 文本编辑器 vim3.1 命令模式3.2 输入模式3.3 末行模式 4 用户和组管理4.1 用户和组帐号概述4.1.1 用户帐号4.1.2 UID和GID 4.2 用户管理 5 组管理…

算法:箱子之形摆放

一、算法描述及解析 要求将一批箱子按从上到下以‘之’字形的顺序摆放在宽度为 n 的空地上&#xff0c;输出箱子的摆放位置&#xff0c; 例如&#xff1a;箱子ABCDEFG&#xff0c;空地宽为3。 如输入&#xff1a; ABCDEFG 3 输出&#xff1a; AFG BE CD 注&#xff1a;最后一行…

leetcode 28.找出字符串中第一个匹配项的下标(python版)

需求 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。 如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 示例 1&#xff1a; 输入&#xff1a;haystack…

2023年OceanBase开发者大会:核心内容与学习收获(附大会核心PPT下载)

本次大会邀请了众多业界领袖、技术大咖和开发者&#xff0c;共同探讨数据库领域的技术发展趋势和未来机会&#xff0c;与开发者共同探讨单机分布式、云原生、HTAP 等数据库前沿趋势&#xff0c;分享全新的产品 roadmap&#xff0c;交流场景探索和最佳实践。 一、大会核心内容 …

v-if及v-for、computed计算属性的使用

v-if 概念及使用 v-if是Vue.js中的一个指令&#xff0c;用于根据表达式的真假值条件性地渲染一块内容。如果表达式的值返回真&#xff0c;则Vue会渲染这块内容&#xff1b;如果返回假&#xff0c;则不渲染。 基本用法: <p v-if"isVisible">看到我了吗&#…

【vim 学习系列文章 3.2 -- vim 删除 空格】

文章目录 vim 删除行尾空格 vim 删除行尾空格 在代码开发的过程中&#xff0c;经常会遇到行尾有空格的现象&#xff0c;如下&#xff1a; 我们可以在 .vimrc 中通过map 命令来映射删除行尾空格的快捷键&#xff0c;如下&#xff1a; map d<space> :%s/\s*$//g <cr…

3分钟彻底搞懂Web UI自动化测试之【POM设计模式】

为什么要用POM设计模式 前期&#xff0c;我们学会了使用PythonSelenium编写Web UI自动化测试线性脚本 线性脚本&#xff08;以快递100网站登录举例&#xff09;&#xff1a; import timefrom selenium import webdriver from selenium.webdriver.common.by import Bydriver …

尚硅谷Ajax笔记

一天拿下 介绍二级目录三级目录 b站链接 介绍 ajax优缺点 http node.js下载配置好环境 express框架 切换到项目文件夹&#xff0c;执行下面两条命令 有报错,退出用管理员身份打开 或者再命令提示符用管理员身份打开 npm init --yes npm i express请求 <script>//引…

【Docker】使用VS创建、运行、打包、部署.net core 6.0 webapi

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Docker容器》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…

《Pandas 简易速速上手小册》第6章:Pandas 时间序列分析(2024 最新版)

文章目录 6.1 时间序列数据基础6.1.1 基础知识6.1.2 重点案例&#xff1a;股票市场分析6.1.3 拓展案例一&#xff1a;温度变化分析6.1.4 拓展案例二&#xff1a;电商平台日销售额分析 6.2 日期与时间功能6.2.1 基础知识6.2.2 重点案例&#xff1a;活动日志分析6.2.3 拓展案例一…