You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确合并@Pattern与@Schema注解为自定义注解并使其生效?

问题解决:自定义组合注解(@Pattern + @Schema)不生效的修复方案

问题原因

你创建的自定义注解缺少必要的元注解配置,导致JSR-380校验框架和Swagger注解处理器无法识别并传递原注解的逻辑:

  • 未指定@Target,注解无法正确作用在字段上
  • 未添加@Constraint标记,校验框架无法将自定义注解识别为有效的校验约束
  • 缺少JSR-380约束注解要求的必备属性,导致校验逻辑无法触发

修复后的自定义注解代码

import javax.validation.Constraint;
import javax.validation.Payload;
import javax.validation.constraints.Pattern;
import io.swagger.v3.oas.annotations.media.Schema;
import java.lang.annotation.*;

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {})
@Pattern(regexp = "^[0-9]{4}-[0-9]{3}-[0-9]{7}-[0-9]$", message = "must match ****-***-*******-*")
@Schema(example = "3021-700-12345567-1")
public @interface NewAnno {
    String message() default "must match ****-***-*******-*";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

关键配置说明

  • @Target:指定注解可作用于字段、方法、参数,与原注解的作用范围保持一致
  • @Constraint(validatedBy = {}):标记该注解为JSR-380校验约束,因为复用了@Pattern的逻辑,无需自定义校验器,留空即可
  • 必备属性message、groups、payload:JSR-380约束注解强制要求的属性,确保校验框架能正常解析
  • 保留@Pattern和@Schema元注解:让校验框架和Swagger分别识别对应的格式规则和示例配置

使用方式

直接在字段上标注自定义注解即可:

@NewAnno
private String depositNumber;

内容的提问来源于stack exchange,提问作者parsa faraji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 01:12:06