javax.validation.UnexpectedTypeException: HV00030: No validator could be found for constraint 'org.hibernate.constraint.Length' validating type 'java.time.LocalDateTime' . Check configuration for 'inTime'java
1.先说明一下该bug的由来,一个微服务A去调用另外一个微服务B,微服务B出现了上面的异常日志,而微服务A的异常日志以下,feign.FeignException:status 500 reading xxxhandlexx(String,xxDTO):
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类型的变量inTime没法找到有Length的校验约束,请检查'inTime'变量的配置,这里的inTime是方法参数DTO对象的一个字段,如图所示:
这里的@Length(max = 30)是致使异常的主要缘由,笔者起初inTime的变量类型是String类型,上面加了@Length(max = 30)参数校验,后来换成了LocalDateTime,可是当时也不知道不能用@Length(max = 30)参数校验也忘记去掉了,这里致使方法入参的时候校验失败,抛出异常。那么为何@Length注解没法用到LocalDateTime变量类型上呢?咱们点进去看一下源码:
注释:Validate that the string is between min and max included.能够看到只是能用于注解到String类型的变量。把@Length去掉bug就解决了。微服务