首页 > 其他分享 >使用jakarta.validation自定义校验规则

使用jakarta.validation自定义校验规则

时间:2024-08-21 16:06:54浏览次数:12  
标签:String 自定义 jakarta 校验 IsCronExpression validation public

jakarta.validation是一套数据校验的规范,内置了NotBlank, NotNull, Min, Pattern等校验注解外,还提供了自定义注解进行任意校验规则的扩展。
依赖包为:

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

这是一个接口规范包,不包含实现。实现jakarta.validation规范的框架有hibernate-validator,只需要pom.xml里引入该依赖

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>8.0.1.Final</version>
</dependency>

但代码里无任何hibernate-validator的import依赖,想切换到其他家的实现时,只需pom.xml里改一下,
代码可以不用任何修改,这也是Jakarta EE的一向主张:面象接口编程,依赖包也是如此,接口包和实现包分离,业务代码只依赖接口包,不依赖具体实现包。

示例

使用注解来校验值是否为一个合格的cron表达式。

1、创建annotation

@Target({ElementType.METHOD, ElementType.FIELD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface IsCronExpression {

    String message() default "表达式格式错误";

    //分组校验
    Class<?>[] groups() default {};

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

2、创建对应的校验器

public class IsCronExpressionValidator implements ConstraintValidator<IsCronExpression, String> {
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        try {
            CronExpression.parse(value);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
}

3、在IsCronExpression 上指定校验器

@Constraint(validatedBy = {IsCronExpressionValidator.class})

4、使用 @IsCronExpression

@Data
public class TaskRequest {

    @NotBlank
    private String taskName;

    @NotBlank
    private String description;

    /**
     * 表达式
     */
    @NotBlank
    @IsCronExpression
    private String taskCron;
    
}

标签:String,自定义,jakarta,校验,IsCronExpression,validation,public
From: https://www.cnblogs.com/jiayuan2006/p/18371837

相关文章

  • Chainlit接入FastGpt接口快速实现自定义用户聊天界面
    前言由于fastgpt只提供了一个分享用的网页应用,网页访问地址没法自定义,虽然可以接入NextWeb/ChatGPTweb等开源应用。但是如果我们想直接给客户应用,还需要客户去设置配置,里面还有很多我们不想展示给客户的东西怎么办?于是,我使用Chainlit实现了一个无缝快速接入fastgpt实现自......
  • Operators和 自定义控制器(Custom Controllers)的区别
    在Kubernetes中,Operators和自定义控制器(CustomControllers)都是用于扩展Kubernetes的功能和管理自定义资源的工具。虽然它们有很多相似之处,但它们的用途和设计目标有一些重要的区别。自定义控制器(CustomControllers)自定义控制器是Kubernetes的控制器模式的一部分,用于管......
  • 自定义 MySQL Shell 提示符
    MySQLShell中的提示符的样式和格式可以根据使用者的需求进行定制。我们可以配置提示符以显示有关数据库连接和使用的模式的不同或简化信息。本文将展示如何添加视觉提示,让您知道何时连接到生产数据库。设置步骤既然您正在阅读关于自定义MySQLShell的内容,您应该已经安装了它......
  • X-anylabeling如何手动加载(自定义)模型 : 以Segment Anything 为例
    提示:文章目录前言1手动下载模型至软件默认读取路径2加载自定义模型假设你已有模型(.pth),如何进行导出安装导出工具导出你的模型,在标注软件中加载模型打开软件,加载‘自定义’模型。并选择上面提到的配置文件X-anylabeling源码安装过程中遇到的问题GPU环境问题opencv......
  • Windows 上使用 PowerShell 设置防火墙规则和端口转发; Windows 上配置端口转发,将 3389
    在PowerShell中配置Windows防火墙的端口转发涉及几个步骤。首先,你需要确保你有足够的权限来进行这些操作(通常需要管理员权限)。以下是如何在PowerShell中配置端口转发的示例步骤:1. 打开PowerShell以管理员身份运行PowerShell。你可以右键点击PowerShell图标,选择“以管......
  • QTabWidget自定义样式(仿DotNetBar)
    QSS如下,若需要tab栏背景色需要添加ui->tabWidget->setAttribute(Qt::WA_StyledBackground);语句使background-color生效,这个时候qtdesigner中仍然看不到背景色,但是不要担心它是生效的,只需在属性中勾上autofillbackground即可在designer中预览(该属性在QWidget属性组中,实际上勾不勾......
  • Swift中的强大构建块:自定义运算符全解析
    标题:Swift中的强大构建块:自定义运算符全解析在Swift编程语言中,运算符是执行操作的一种快捷方式,它们可以用于简单的数学计算,也可以用于复杂的逻辑处理。Swift不仅提供了丰富的内置运算符,还允许开发者定义自己的运算符,以适应特定的编程需求。本文将深入探讨如何在Swift中实现......
  • .net core 自定义异常信息
    思路:在startup.cs的configservice中配置一下,异常实现 ExceptionFilterAttribute接口 1publicclassExceptionConfig2{3publicstaticvoidConfigureServices(IServiceCollectionservices)4{5//自定义捕捉异常6services.AddCont......
  • IOS 12 自定义用户协议对话框
    实现效果实现逻辑本文使用QMUI里面提供的控制器+自定义控件实现。添加依赖#腾讯开源的UI框架,提供了很多功能,例如:圆角按钮,空心按钮,TextView支持placeholder#https://github.com/QMUI/QMUIDemo_iOS#https://qmuiteam.com/ios/get-startedpod"QMUIKit"还不了解如何使......
  • 5章1节:用R语言进行定量数据的统计描述,文末有众数的自定义函数
    在科研中,很多资料经过整理之后,常常需要进行一系列的统计分析,以说明资料的特征。这种分析方法中,统计描述是最基础且最重要的部分之一。统计描述主要通过统计指标和统计图表来描述数据的分布规律及其数量特征,从而为后续的统计推断提供基础。统计描述不仅在医学科研中应用广泛,在......