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

本文解析了在使用Hibernate框架进行数据校验时,由于校验注解与字段类型不匹配导致的错误,并提供了具体的解决方案,如将@NotEmpty替换为@NotNull用于Integer类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 异常信息如下:

No validator could be found for constraint 'org.hibernate.validator.constraints.Length' validating type 'java.lang.Integer'. Check configuration for 'xxxxxx'

错误原因字面翻译是:约束'org.hibernate.validator.constraints.Length'验证类型'java.lang.Integer'找不到验证器。 检查“ XXXXXX”的配置。也就是 在类中使用的校验注解所支持的数据类型与实体中字段的类型不符合

例如:

        private Integer status;	
        private String strdemo;

        @NotEmpty(message="状态:不能为空")
	public Integer getStatus() {
		return status;
	}

	public void setStatus(Integer status) {
		this.status = status;
	}
	
	@Length(message="长度必须介于 0 和 255 之间")
	public String getStrdemo() {
		return strdemo;
	}

	public void setStrdemo(String strdemo) {
		this.strdemo= strdemo;
	}

上面代码中在Integer  status 的字段上使用@NotEmpty,@NotEmpty支持的是字符串类型字段,这样子使用肯定是会报错的。

解决方法:换个校验注解- 将Integer类型的字段上使用的@NotEmpty换成@NotNull,或者不使用校验注解

        private Integer status;	
        private String strdemo;

        @NotNull(message="状态:不能为空")
	public Integer getStatus() {
		return status;
	}

	public void setStatus(Integer status) {
		this.status = status;
	}
	
	@Length(message="长度必须介于 0 和 255 之间")
	public String getStrdemo() {
		return strdemo;
	}

	public void setStrdemo(String strdemo) {
		this.strdemo= strdemo;
	}

        private Integer status;	
       
	public Integer getStatus() {
		return status;
	}

	public void setStatus(Integer status) {
		this.status = status;
	}

 

在 Java 的 Bean Validation 框架中,当使用 Hibernate Validator 对字段进行约束验证时,如果对类型为 `Long` 的字段应用了 `@NotBlank` 注解,就会抛出异常 `HV000030: No validator could be found for constraint 'javax.validation.constraints.NotBlank' validating type 'java.lang.Long'` [^2]。 该问题的根本原因在于 `@NotBlank` 是专为 `CharSequence` 类型(如 `String`)设计的注解,用于确保字符序列不为空(即长度大于 0 且至少包含一个非空白字符)。而 `Long` 类型并不属于字符序列,因此无法使用 `@NotBlank` 进行验证 [^2]。 在这种情况下,应根据字段的实际需求选择合适的验证注解: - 如果需要确保 `Long` 类型字段不为 `null`,应使用 `@NotNull` 注解。 - 如果需要确保 `Long` 类型字段的值大于零,可以结合 `@Min(1)` 使用。 - 如果字段表示字符串形式的数字(如 `String` 类型),并且确实需要检查是否为空白字符串,则可以继续使用 `@NotBlank`。 示例代码如下,展示如何正确地对 `Long` 类型字段进行非空验证: ```java import javax.validation.constraints.NotNull; public class ExampleClass { @NotNull(message = "ID 不能为空") private Long id; // Getter 和 Setter public Long getId() { return id; } public void setId(Long id) { this.id = id; } } ``` 在 Spring MVC 或其他基于 Bean Validation 的框架中,上述配置将确保 `id` 字段在验证时不会因为类型不匹配而抛出 `UnexpectedTypeException` [^5]。 此外,如果字段是集合类型(如 `List`, `Set`),并希望验证其非空,应使用 `@NotEmpty` 注解;而对于基本类型的包装类(如 `Long`, `Integer`),则应使用 `@NotNull` 或 `@Min` 等适合数值类型的约束注解 [^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值