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

Java自定义字段校验注解写法及default关键字作用咨询

关于注解语法的解释

你看到的public String key() default "";不是普通类/接口里声明的业务方法,这是Java注解(Annotation)定义里的专属语法,用来声明注解的可配置参数:

  • 这行代码定义了一个名为key、类型为String的注解参数,你在使用对应注解时,可以手动给这个参数传值,比如@CustomAnno(key = "userName")。
  • 这里的default关键字作用是给这个参数设置默认值:如果使用注解时没有手动给key传值,程序会自动取空字符串""作为该参数的值,不需要每次使用注解都显式配置这个参数。如果注解参数没有写default值,使用注解时必须给该参数传值,否则编译不通过。

注意区分default的两个常见使用场景:你看到的这个是注解参数的默认值配置,和Java 8之后接口里的default默认方法不是一回事——接口默认方法是给接口方法写默认实现逻辑,注解里的default仅用来设置参数默认取值。

自定义字段正则校验注解实现步骤

你要实现的name字段正则校验,可以按照JSR-380(Bean Validation)规范写自定义校验注解,步骤如下:

  1. 定义注解本体,搭配元注解指定注解的作用范围、保留时机、绑定的校验器
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.*;

// 指定注解可以标注在类的字段上
@Target({ElementType.FIELD})
// 指定注解保留到程序运行阶段,方便校验框架通过反射读取注解信息
@Retention(RetentionPolicy.RUNTIME)
// 绑定该注解对应的校验逻辑实现类
@Constraint(validatedBy = NamePatternValidator.class)
public @interface ValidName {
    // 校验不通过时的默认错误提示
    String message() default "名称仅支持字母、数字、下划线、@符号";
    // 校验分组参数,Bean Validation规范要求必须加,默认空数组即可
    Class<?>[] groups() default {};
    // 校验负载参数,Bean Validation规范要求必须加,默认空数组即可
    Class<? extends Payload>[] payload() default {};
}
  1. 编写对应的校验逻辑实现类
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;

public class NamePatternValidator implements ConstraintValidator<ValidName, String> {
    // 注意修正你写的正则笔误:[a-zA-z]的范围会包含[\]^`等多余特殊字符,正确字母范围是[a-zA-Z]
    private static final String VALID_NAME_REGEX = "^[a-zA-Z0-9_@]+$";

    @Override
    public boolean isValid(String fieldValue, ConstraintValidatorContext context) {
        // 空值放行,如果需要校验非空可以单独搭配@NotBlank等注解使用
        if (fieldValue == null) {
            return true;
        }
        return fieldValue.matches(VALID_NAME_REGEX);
    }
}
  1. 使用方式:直接在需要校验的name字段上标注注解即可
public class User {
    @ValidName
    private String name;

    // 省略getter/setter
}
学习资料推荐
  • 最权威的入门材料是Oracle官方Java教程中的注解章节,完整覆盖注解定义、元注解、参数配置、运行时读取的全流程规则
  • 做校验注解可以看Bean Validation官方文档的自定义约束章节,明确规范要求的写法,避免踩坑
  • 国内技术社区可以搜索「Java 自定义注解」「Spring Validation 自定义校验」关键词,找发布时间近、有可运行示例的文章跟着实操,上手很快

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:27:25