Lombok @Data Bean出现Hibernate验证重复ConstraintViolations问题求助
解决Lombok注解重复导致Hibernate Validator重复报错问题
问题分析
当前代码中,字段上的验证注解(@NotBlank、@Pattern)通过lombok.config被复制到生成的getter上,导致字段和getter同时存在相同的验证注解,触发Hibernate Validator重复验证;而swagger-gradle-plugin仅扫描getter注解生成OpenAPI文档,需要保证目标注解在getter上。
解决方案
直接将所有需要的注解(验证注解+@Schema)通过Lombok的@Getter注解的onMethod_参数绑定到生成的getter上,字段上不再保留任何业务注解,同时移除lombok.config中的注解复制配置。
调整后的Foo类代码
@Data public class Foo { @Getter(onMethod_ = { @NotBlank, @Schema(description = "Organization label"), @Pattern(regexp = "^[-a-zA-Z0-9]+(\\.[-a-zA-Z0-9]+)?$", message = "Label must be alphanumeric with dashes.") }) private String label; }
注:若使用Lombok 1.18.16及以上版本,可替换为
onMethod = @__({...})(需确保项目启用了相关注解处理配置),onMethod_是兼容旧版本的写法。
清理lombok.config配置
删除之前添加的注解复制规则,避免不必要的注解复制:
# 移除以下配置项 # lombok.copyableAnnotations += javax.validation.constraints.NotBlank # lombok.copyableAnnotations += javax.validation.constraints.Pattern # lombok.copyableAnnotations += javax.validation.constraints.NotEmpty # lombok.copyableAnnotations += javax.validation.constraints.NotNull
效果说明
- swagger-gradle-plugin可扫描到getter上的
@Schema和验证注解,正常生成OpenAPI文档。 - Hibernate Validator仅检测getter上的验证注解,不会因字段和getter重复注解触发两次错误报告。
内容的提问来源于stack exchange,提问作者igr
相关产品推荐
相关产品推荐

