Quarkus升级至3.6.3后Hibernate Validator构建报错NoSuchMethodError
问题分析与解决
这个NoSuchMethodError的根本原因是依赖版本不兼容,和Set的校验器无关。Quarkus 3.x基于Jakarta EE 9+体系,对依赖版本有严格的一致性要求,你遇到的是Hibernate Validator内部方法签名不匹配的问题,大概率是依赖树里混进了旧版本的Hibernate Validator或者javax.validation相关依赖。
解决步骤
清理依赖冲突
用构建工具的依赖分析命令排查冲突:- Maven:执行
mvn dependency:tree,搜索hibernate-validator和javax.validation,如果发现非Quarkus BOM管理的版本,直接在对应依赖中排除。 - Gradle:执行
./gradlew dependencies,同样排查并排除冲突依赖。
- Maven:执行
不要手动指定扩展版本
Quarkus的BOM已经统一管理了所有官方扩展的版本,引入依赖时不要加版本号,让BOM自动控制版本匹配:// Gradle示例 implementation 'io.quarkus:quarkus-hibernate-validator'<!-- Maven示例 --> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-hibernate-validator</artifactId> </dependency>修正不必要的校验注解
OpenAPI生成的@NotNull @Valid Set<Long> requestBody里,@Valid是多余的——Long是基本类型包装类,不需要嵌套校验。如果要校验集合不为空,应该用@NotEmpty或者@Size(min = 1),@NotNull仅校验集合引用不为null,空集合不会触发校验。
内容的提问来源于stack exchange,提问作者GeauxEric
相关产品推荐
相关产品推荐

