No validator could be found for constraint 'org.hibernate.constraint.Length'异常

  • bug异常主要信息如下:
    javax.validation.UnexpectedTypeException: HV00030: No validator could be found for constraint ‘org.hibernate.constraint.Length’ validating type ‘java.time.LocalDateTime’ . Check configuration for 'inTime’
  • 如图所示:
    No validator could be found for constraint 'org.hibernate.constraint.Length'异常_第1张图片
  1. 先说明一下该bug的由来,一个微服务A去调用另一个微服务B,微服务B出现了上面的异常日志,而微服务A的异常日志如下,feign.FeignException:status 500 reading xxxhandlexx(String,xxDTO):
    No validator could be found for constraint 'org.hibernate.constraint.Length'异常_第2张图片
  2. 由于被调用的B微服务已经有了异常日志,说明该调用已经发送到B微服务了,我们可以从B微服务的异常日志来排查异常。
  3. 回到第一张图的异常日志,这里已经很清晰了,javax.validation.UnexpectedTypeException: HV00030: No validator could be found for constraint ‘org.hibernate.constraint.Length’ validating type ‘java.time.LocalDateTime’ . Check configuration for ‘inTime’,validation参数校验的时候出现了异常,LocalDateTime的类型的变量无法找到有Length的校验约束,请检查’inTime’变量的配置,这里的inTime变量参数对象的一个字段,如图所示:No validator could be found for constraint 'org.hibernate.constraint.Length'异常_第3张图片
    这里的@Length(max = 30)是导致异常的主要原因,笔者起初inTime的变量类型是String类型,上面加了@Length(max = 30)参数校验,后来换成了LocalDateTime,但是当时也不知道不能用@Length(max = 30)参数校验也忘记去掉了,这里导致方法入参的时候校验失败,抛出异常。那么为什么@Length注解无法用到LocalDateTime变量类型上呢?我们点进去看一下源码:No validator could be found for constraint 'org.hibernate.constraint.Length'异常_第4张图片
    注释:Validate that the string is between min and max included.可以看到只是能用于注解到String类型的变量。把@Length去掉bug就解决了。
  • 如果文章有误,希望指出来。

你可能感兴趣的:(bug,异常,validator,bug记录)