添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

解决“No validator could be found for constraint validating type 'java.lang.Byte'”错误

1. 问题背景

在开发过程中,我们常常会使用Java Bean Validation框架来验证实体类中的数据。但是在某些情况下,可能会遇到以下错误信息:

No validator could be found for constraint validating type 'java.lang.Byte'

这个错误通常发生在使用Byte类型作为验证目标的时候,因为Java Bean Validation框架默认情况下没有提供对Byte类型的验证器。

2. 解决步骤

为了解决这个问题,我们需要按照以下步骤进行操作:

下面我们一步一步来完成这些操作。

3. 创建自定义的验证器类

首先,我们需要创建一个自定义的验证器类,用于验证Byte类型的数据。创建一个名为ByteValidator的类,代码如下:

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class ByteValidator implements ConstraintValidator<ByteConstraint, Byte> {
    @Override
    public boolean isValid(Byte value, ConstraintValidatorContext context) {
        // 在这里实现对Byte类型数据的验证逻辑
        // 返回true表示验证通过,返回false表示验证失败
        return value >= 0 && value <= 100;

在上述代码中,我们实现了ConstraintValidator<ByteConstraint, Byte>接口,并重写了其中的isValid方法。在isValid方法中,我们可以编写我们的验证逻辑。在这个例子中,我们验证了Byte类型的数据是否在0到100之间。

4. 使用自定义的验证器对Byte类型进行验证

接下来,我们需要在我们要验证的实体类中使用自定义的验证器进行验证。假设我们有一个名为User的实体类,其中有一个名为age的属性需要验证。我们需要在age属性上使用验证注解,并指定使用我们自定义的验证器ByteValidator。代码如下:

import javax.validation.constraints.NotNull;
public class User {
    @NotNull
    @ByteConstraint
    private Byte age;
    // 其他属性和方法省略...

在上述代码中,我们使用了@ByteConstraint注解来指定使用我们自定义的验证器ByteValidator进行验证。

5. 验证注解中使用自定义的验证器

最后,我们需要在验证注解的定义中使用我们自定义的验证器。创建一个名为ByteConstraint的注解,并在其中使用@Constraint注解指定要使用的验证器。代码如下:

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
@Documented
@Constraint(validatedBy = ByteValidator.class)
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface ByteConstraint {
    String message() default "Invalid byte value";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};

在上述代码中,我们使用@Constraint(validatedBy = ByteValidator.class)注解来指定要使用的验证器为我们自定义的验证器ByteValidator

6. 测试验证

完成以上步骤后,我们就可以进行验证测试了。在测试类中创建一个方法,并使用javax.validation.Validator进行验证。代码如下:

import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
public class ValidationTest {
    public static void main(String[] args) {
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        Validator validator = factory.getValidator();
        User user = new User();
        user.setAge((byte) 200); // 设置一个超过范围的值进行测试
        Set<ConstraintViolation<User>> violations = validator.validate(user);
        for (ConstraintViolation<User> violation : violations) {
            System.out.println(violation.getMessage());

在上述代码中,我们使用了javax.validation.Validator进行验证,并输出验证失败的信息。

通过以上步骤,我们成功解决了“No validator could be found for constraint validating type 'java.lang.Byte'”错误。通过创建自定义的验证器类,并在验证注解中使用该验证器

利用tomcat运行jsp文件时,出现错误Unrecognized option: --add-opens=java.base/java.lang=ALL-UNNAMED Error: Could n

利用tomcat运行jsp文件时,出现错误Unrecognized option: --add-opens=java.base/java.lang=ALL-UNNAMED Error: Could n

No validator could be found for constraint ‘javax.validation.constraints.NotBlank‘ validating type

这是因为@NotBlank是validation-api 2.x才有的。hibernate-validator 6.x 依赖的是validation-api 2.x。所以排除项目中hibernate-validator 6.x 以下的依赖。

【Bug】No validator… javax.validation.constraints.NotBlank validating type java.lang.Integer

经检查,是因为在 Integer 类型的字段上加了@NotBlank的校验注解,而该注解只能用于字符串类型,因此

javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint

使用hibernate validator出现上面的错误, 需要 注意 @NotNull 和 @NotEmpty 和@NotBlank 区别 @NotEmpty 用在集合类上面@NotBlank 用在String上面@NotNull 用在基本类型上 如果在基本类型上面用NotEmpty或者NotBl

【已解决】javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint

javax.val

javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 解决方法

在使用hibernate validator进行参数有效性校验的时候,我们有时候会遇到javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint ,比如,在我们的应用中,

Validation异常:No validator could be found for constraint '.....' validating type 'java.lang.Integer'.

  javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'javax.validation.constraints.Pattern' validatin