首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当使用复合约束@NotBlank进行注释时,自定义验证器不能(完全)工作

当使用复合约束@NotBlank进行注释时,自定义验证器可能无法完全工作。@NotBlank是一个常用的约束注释,用于验证字符串类型的字段不为空或不为空格。然而,它只能验证字符串的非空性,而无法验证其他自定义的约束条件。

自定义验证器是一种用于验证特定字段的自定义逻辑。它可以通过实现javax.validation.ConstraintValidator接口来创建。自定义验证器通常用于验证复杂的约束条件,例如验证密码强度、验证邮箱格式等。

然而,当使用@NotBlank注释时,自定义验证器可能无法完全工作的原因是@NotBlank注释已经定义了自己的验证逻辑,它会覆盖自定义验证器的逻辑。因此,自定义验证器的逻辑将不会被执行。

解决这个问题的方法是使用自定义注释来替代@NotBlank注释,并在自定义验证器中实现相应的逻辑。通过这种方式,可以确保自定义验证器的逻辑能够完全工作。

以下是一个示例代码,展示了如何使用自定义注释和验证器来验证字段的非空性以及其他自定义的约束条件:

代码语言:java
复制
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = CustomValidator.class)
public @interface CustomConstraint {
    String message() default "Invalid field";

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

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

public class CustomValidator implements ConstraintValidator<CustomConstraint, String> {
    @Override
    public void initialize(CustomConstraint constraintAnnotation) {
        // 初始化操作
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        // 自定义验证逻辑,包括非空性验证和其他约束条件的验证
        if (value == null || value.trim().isEmpty()) {
            return false;
        }
        // 其他自定义约束条件的验证逻辑
        // ...
        return true;
    }
}

public class MyClass {
    @CustomConstraint
    private String myField;

    // 其他字段和方法
}

在上述示例中,我们定义了一个自定义注释@CustomConstraint,并在该注释中指定了自定义验证器CustomValidator。CustomValidator实现了ConstraintValidator接口,并在isValid方法中实现了自定义的验证逻辑。

在需要验证的字段上,我们使用@CustomConstraint注释来替代@NotBlank注释。这样,当验证器执行时,会调用CustomValidator中的isValid方法进行验证。

需要注意的是,以上示例中的代码仅为演示目的,实际使用时需要根据具体的业务需求和约束条件进行适当的修改。

腾讯云提供了一系列的云计算产品,包括云服务器、云数据库、云存储等,可以根据具体的需求选择相应的产品进行使用。具体的产品介绍和文档可以在腾讯云官方网站上找到。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SpringBoot整合JSR303实现参数校验

Bean Validation 为 JavaBean 验证定义了相应的元数据模型和API。缺省的元数据是Java Annotations,通过使用 XML 可以对原有的元数据信息进行覆盖和扩展。...private Date submitTime; } 同一个属性可以指定多个约束,比如@NotNull和@MAX,其中的message属性指定了约束条件不满足的提示信息。...如何自定义校验? 虽说在日常的开发中内置的约束注解已经够用了,但是仍然有些时候不能满足需求,需要自定义一些校验约束。 举个栗子:有这样一个例子,传入的数字要在列举的值范围中,否则校验失败。...自定义校验 @Constraint注解指定了校验为EnumValuesConstraintValidator,因此需要自定义一个。...,则可以的自定义对应数据类型的校验,然后在约束注解头上的@Constraint注解中指定其他的校验

3K22

【Spring】SpringBoot的10个参数验证技巧

一些最常用的验证注释包括: @NotNull:指定字段不能为空。 @NotEmpty:指定列表字段不能为空。 @NotBlank:指定字符串字段不得为空或仅包含空格。...如果有特殊参数验证的场景,可以使用 Spring 的 JSR 303 验证框架创建自定义验证注释自定义注解可以让你的的验证逻辑更具可重用性和可维护性。...定义了自定义验证注释验证类后,我们现在可以使用它来验证 Spring Boot 应用程序中的帖子标题: public class Post { @UniqueTitle private String...Integer age; } 我们使用 message属性为每个验证注释提供了自定义错误消息。...EmailNotEmpty 组将包含 email 字段不为空验证规则,而 Default 组将包含所有三个字段的正常验证规则。

61240
  • 求求你别在用IF ELSE校验参数了

    2.为什么使用Hibernate Validator 提高代码整洁度; 验证逻辑与业务逻辑之间进行了分离,降低了程序耦合度; 统一且规范的验证方式,无需你再次编写重复的验证代码; 你将更专注于你的业务,...被注释的元素必须是电子邮箱地址 @NotBlank 验证字符串非null,且trim后长度必须大于0 @NotEmpty 适用于String、Collection、Map或者数组不能为Null且长度或元素个数必须大于...@Valid:作为标准JSR-303规范,还没有吸收分组的功能; @Valid:可以用在方法、方法参数、构造函数、方法参数和成员属性(字段)上; @Valid加在方法参数不能够自动进行嵌套验证,而是用在需要嵌套验证类的相应字段上...constraint 一般情况,自定义验证可以解决很多问题;某些业务场景下又需要做一些特别的参数校验,此时,我们可以实现validator的接口,自定义验证。...这只是一个小例子,大家可以根据业务场景自定义参数校验,例如敏感词校验、预防sql注入、js脚本攻击等等,都可以用自定义校验来完成。

    1.7K20

    求求你别在用IF ELSE校验参数了

    2.为什么使用Hibernate Validator 提高代码整洁度; 验证逻辑与业务逻辑之间进行了分离,降低了程序耦合度; 统一且规范的验证方式,无需你再次编写重复的验证代码; 你将更专注于你的业务,...被注释的元素必须是电子邮箱地址 @NotBlank 验证字符串非null,且trim后长度必须大于0 @NotEmpty 适用于String、Collection、Map或者数组不能为Null且长度或元素个数必须大于...@Valid:作为标准JSR-303规范,还没有吸收分组的功能; @Valid:可以用在方法、方法参数、构造函数、方法参数和成员属性(字段)上; @Valid加在方法参数不能够自动进行嵌套验证,而是用在需要嵌套验证类的相应字段上...constraint 一般情况,自定义验证可以解决很多问题;某些业务场景下又需要做一些特别的参数校验,此时,我们可以实现validator的接口,自定义验证。...这只是一个小例子,大家可以根据业务场景自定义参数校验,例如敏感词校验、预防sql注入、js脚本攻击等等,都可以用自定义校验来完成。

    1.9K10

    求求你别在用IF ELSE校验参数了

    2.为什么使用Hibernate Validator 提高代码整洁度; 验证逻辑与业务逻辑之间进行了分离,降低了程序耦合度; 统一且规范的验证方式,无需你再次编写重复的验证代码; 你将更专注于你的业务,...被注释的元素必须是电子邮箱地址 @NotBlank 验证字符串非null,且trim后长度必须大于0 @NotEmpty 适用于String、Collection、Map或者数组不能为Null且长度或元素个数必须大于...@Valid:作为标准JSR-303规范,还没有吸收分组的功能; @Valid:可以用在方法、方法参数、构造函数、方法参数和成员属性(字段)上; @Valid加在方法参数不能够自动进行嵌套验证,而是用在需要嵌套验证类的相应字段上...constraint 一般情况,自定义验证可以解决很多问题;某些业务场景下又需要做一些特别的参数校验,此时,我们可以实现validator的接口,自定义验证。...这只是一个小例子,大家可以根据业务场景自定义参数校验,例如敏感词校验、预防sql注入、js脚本攻击等等,都可以用自定义校验来完成。

    1.8K20

    Validator,就来这一篇吧

    2.为什么使用Hibernate Validator 提高代码整洁度; 验证逻辑与业务逻辑之间进行了分离,降低了程序耦合度; 统一且规范的验证方式,无需你再次编写重复的验证代码; 你将更专注于你的业务,...被注释的元素必须是电子邮箱地址 @NotBlank 验证字符串非null,且trim后长度必须大于0 @NotEmpty 适用于String、Collection、Map或者数组不能为Null且长度或元素个数必须大于...@Valid:作为标准JSR-303规范,还没有吸收分组的功能; @Valid:可以用在方法、方法参数、构造函数、方法参数和成员属性(字段)上; @Valid加在方法参数不能够自动进行嵌套验证,而是用在需要嵌套验证类的相应字段上...constraint 一般情况,自定义验证可以解决很多问题;某些业务场景下又需要做一些特别的参数校验,此时,我们可以实现validator的接口,自定义验证。...这只是一个小例子,大家可以根据业务场景自定义参数校验,例如敏感词校验、预防sql注入、js脚本攻击等等,都可以用自定义校验来完成。

    2.7K10

    请不要再使用判断进行参数校验了

    数据校验的痛点 为了保证数据语义的正确,我们需要进行大量的判断来处理验证逻辑。而且项目的分层也会造成一些重复的校验,产生大量与业务无关的代码。不利于代码的维护,增加了开发人员的工作量。 3....4.1 约束注解的基本使用 我们对需要校验的方法入参进行注解约束标记,例子如下: @Data public class Student { @NotBlank(message = "姓名必须填...使用下面数据进行请求将会抛出MethodArgumentNotValidException异常,提示age范围超出1-50。...所以要用多个注解来约束。如果我们某些场景需要重复的捆绑多个注解来使用时,可以使用自定义注解将它们封装起来组合使用,下面这个注解就是将@NotNull和@Range进行了组合,你可以仿一个出来用用看。...接口来定义一个颜色约束了,其中泛型A为自定义约束注解,泛型T为入参的类型,这里使用字符串,然后我们的实现如下: /** * @author felord.cn

    1K30

    hibernate-validator校验参数(统一异常处理)

    ,字符串则表示为字符串长度 @NotEmpty 被注释的字符串的必须非空,可以为空格,空字符串,null @Range(min=, max=) 被注释的元素必须在合适的范围内 @NotBlank注释的字符串的必须非空...依赖spring-boot-starter-web这个starter,会自动传递相应的Bean Validation依赖。...使用@Validated也需要放在参数列表中,放在类上和放在方法上都会导致没有校验。...@RequestBody接收json数据,必须在方法的参数列表里面使用@Valid或@Validated来告诉hibernate-validator需要校验参数封装实体的字段约束(被标注到字段上的校验注解...@Validated,不能用@Valid替换 此时生效的是:@Null(groups = OnCreate.class),id必须为空,userName和mobile不能为空 五、自定义校验 有时官方提供的注解规则不能满足我们的需要

    1.4K20

    你有没有使用过这些编程骚操作(二)- 验证框架(Part A)

    一、验证框架 验证框架对用来对数据进行校验的一个框架,本篇将演示如何通过使用已有的约束注解及如何自定义约束注解进行数据校验,并了解JSR规范、验证框架的原理 验证模型 第一种是分层验证即在MVC架构中的每一层进行校验...,实现在Spring环境中更简单、更高效的对数据进行验证 常用约束注解 空值校验类:@Null、@NotNull、@NotEmpty、@NotBlank 范围校验类:@Min、@Size、@Digits...空值验证 范围验证 其他验证 @NotNull 在User实体类的userId属性上增加注解@NotNull(message="用户ID不能为空"),message为验证信息,不符合条件时会返回message...、@NotBlank @NotEmpty和@NotBlank都可以验证内容是否为空。...再次执行测试 init方法中设置userName和password都为" ",再次执行测试 @NotBlank会自动去掉字符串中的空格后再进行验证 @Length 可用于验证字符串的长度,有min

    64910

    一文弄懂spring validate​

    建议在一个类中坚持使用字段 或属性注释。不建议对字段和随附的getter方法进行注释*,*因为这将导致对该字段进行两次验证。...传递给定约束声明的约束注释。 保证在使用此实例进行验证之前调用此方法。 默认的实现是no-op。...考虑bean X包含一个类型为Y的字段的情况,通过使用@Valid注释字段Y,验证将在验证X验证Y(及其属性)。 类型Y(子类,实现)声明的字段中包含的值的确切类型Z是在运行时确定的。...使用Z的约束定义。 这确保标记为@Valid的关联具有正确的多态行为。 集合值、数组值以及通常可迭代的字段和属性也可以用@Valid注释进行装饰。 这将导致验证迭代的内容。...但是java.util.List不是JavaBean(根据JavaBean的官方描述),因此不能使用兼容JSR-303的验证直接对其进行验证

    3.5K31

    JavaBean基于注解实现校验

    ,这个我当时很好奇,所以我实验了一下,结论是:@Validated使用在类上,会触发当前类所有写在方法参数上的参数校验注解的生效。...@Validated:提供了一个分组功能,可以在入参验证,根据不同的分组采用不同的验证机制 5....无法查检长度为0的字符串 @NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格....数值检查 建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为“”无法转换为int,但可以转换为Stirng为"",Integer为null @Min 验证 Number...(是否进行递归验证) @CreditCardNumber信用卡验证 @Email 验证是否是邮件地址,如果为null,不进行验证,算通过验证

    1.1K20

    详解java参数校验之:顺序校验、自定义校验、分组校验(@Validated @GroupSequence)

    使用 @Validated、@GroupSequence 和自定义校验规则,可以实现对实体类属性的分组校验 首先,定义验证分组的接口: public interface Group1 {} public...username 字段在 Group1 分组中不能为空白(@NotBlank),password 字段在 Group2 分组中必须是长度在 6 到 20 之间的字符串,并通过 @CustomValidation...使用该服务类进行方法调用时,会按照 @GroupSequence 中指定的顺序依次对分组进行校验,并执行自定义校验规则。...具体的验证逻辑和业务约束根据实际需求进行定义和实现。...注意,在使用显式调用 Validator 对象进行验证,需要自己处理校验失败的情况,并根据实际需求进行后续操作。

    80410

    【全网最全】JSR303参数校验与全局异常处理(从理论到实践别用if判断参数了)

    Jakarta Bean Validation 2.0 - 为实体和方法验证定义了元数据模型和 API。默认元数据源是注释,能够通过使用 XML 覆盖和扩展元数据。...约束注解说明 @Null 用于验证对象为null @NotNull 用于对象不能为null,无法查检长度为0的字符串 @NotBlank 只用于String类型上,不能为null且trim()之后的size...、方法参数和成员属性(字段)上 可以加在成员属性(字段)上,能够独自完成级联校验 总结:@Validated用到分组使用,一个学校对象里还有很多个学生对象需要使用@Validated在Controller...不同Controller添加校验规则 注意:我们要进行分组,所以@Valid不能使用了,要使用@Validated。相信大家已经看到上面的他俩区别了哈!...测试 九、自定义校验 1.定义自定义校验 import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext

    81020

    SpringBoot中使用注解对实体类中的属性进行校验

    只要验证的返回值为false,就直接报错,不会在往下执行。...空检查 @Null 验证对象是否为null @NotNull 验证对象是否不为null, 无法查检长度为0的字符串 @NotBlank 检查约束字符串是不是...@Pattern 验证 String 对象是否符合正则表达式的规则 ​ 数值检查,建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为“”无法转换为int,但可以转换为..., 因为在前端传递过来数据可能是大量的数据或者是一个对象,这样如果一个一个的手写注解验证非常的麻烦,此时就需要使用到这两个注解,这两个注解会递归的将对象中的每个实体类属性进行校验,所有验证成功的时候才会向下执行...2.5.6 自定义校验注解 即使springboot内置了各种注解去帮助我们校验参数,但是当面对复杂参数校验,还是不能满足我们的要求,这时候我们就需要自定义校验注解。

    4.7K21

    springboot实现Validator校验

    一个优秀的后端,是不会相信任何传入的参数的 要做到这一点,以前我们是写大量的判断代码来验证数据的格式 在开发中,我们实际不这么干,我们使用Hibernate Validator来进行参数校验 它实现了...JSR 303规范,使我们的代码的健壮性大大提高 先列出一些常用注解 约束注解 详细信息 @Null 被注释的元素必须为 null @NotNull 被注释的元素必须不为 null @AssertTrue...@NotEmpty 被注释的字符串的必须非空 @Range 被注释的元素必须在合适的范围内 使用方式也很简单,springboot引入依赖就可以使用了 <groupId...然后在接口上加@Valid注解 这个时候我们启动项目发现,已经成功校验了,如果我们参数格式错误,会抛出一个MethodArgumentNotValidException 这时候我们就只需要在全局异常处理进行捕获...extends Payload>[] payload() default {}; } 然后在我们的参数上加上我们自定义的注解 重启,测试,发现测试通过 如果是枚举的话,也得使用这种自定义的方式去做校验

    40220

    这么写参数校验(validator)就不会被劝退了~

    点击上方“码农沉思录”,选择“设为星标” 优质文章,及时送达 很痛苦遇到大量的参数进行校验, 在业务中还要抛出异常或者不断的返回异常的校验信息, 在代码中相当冗长, 充满了 if-else 这种校验代码...此处只列出 Hibernate Validator 提供的大部分验证约束注解,请参考 hibernate validator 官方文档了解其他验证约束注解和进行自定义验证约束注解定义。...@Validated 声明要检查的参数 这里我们在控制进行注解声明 /** * 走参数校验注解 * * @param userDTO * @return...然后自定义 Validator 这个是真正进行验证的逻辑代码: public class IdentityCardNumberValidator implements ConstraintValidator...使用自定义的注解 @NotBlank(message = "身份证号不能为空") @IdentityCardNumber(message = "身份证信息有误,请核对后提交") private

    41610

    SpringBoot 使用 JSR303 实现参数验证

    很多时候同样的数据验证逻辑会出现在不同的层,这样就会导致代码冗余和一些管理的问题,比如说语义的一致性等。为了避免这样的情况发生,最好是将验证逻辑与相应的域模型进行绑定。...Bean Validation 为 JavaBean 验证定义了相应的元数据模型和 API。缺省的元数据是 Java Annotations,通过使用 XML 可以对原有的元数据信息进行覆盖和扩展。...虽然JSR303和springboot-validator 已经提供了很多校验注解,但是当面对复杂参数校验,还是不能满足我们的要求,这时候我们就需要 自定义校验注解。...根据Bean Validation API 规范的要求: message属性, 这个属性被用来定义默认得消息模版, 这个约束条件被验证失败的时候,通过 此属性来输出错误信息。...@Documented: 表示在对使用了该注解的类进行javadoc操作到时候, 这个标注会被添加到 javadoc当中.

    66630

    Spring Boot 使用 JSR303 实现参数验证

    很多时候同样的数据验证逻辑会出现在不同的层,这样就会导致代码冗余和一些管理的问题,比如说语义的一致性等。为了避免这样的情况发生,最好是将验证逻辑与相应的域模型进行绑定。...Bean Validation 为 JavaBean 验证定义了相应的元数据模型和 API。缺省的元数据是 Java Annotations,通过使用 XML 可以对原有的元数据信息进行覆盖和扩展。...虽然JSR303和springboot-validator 已经提供了很多校验注解,但是当面对复杂参数校验,还是不能满足我们的要求,这时候我们就需要 自定义校验注解。...根据Bean Validation API 规范的要求: message属性, 这个属性被用来定义默认得消息模版, 这个约束条件被验证失败的时候,通过 此属性来输出错误信息。...@Documented: 表示在对使用了该注解的类进行javadoc操作到时候, 这个标注会被添加到 javadoc当中.

    78140
    领券