Java中Object类本身不支持注解校验,真正实现字段自动校验的是基于JSR-303/JSR-380规范的框架(如Hibernate Validator),需在具体POJO类字段上添加@NotNull等注解,并通过Validator接口或Spring的@Valid触发校验。

Java 中 Object 类本身不支持注解校验,它只是所有类的根父类,不具备校验能力。真正实现字段自动校验的是基于 JSR-303/JSR-380(即 Bean Validation 规范) 的框架(如 Hibernate Validator),配合在 POJO 字段上添加校验注解(如 @NotNull、@Size 等),再通过 Validator 接口触发校验逻辑。
校验注解要加在具体的 Java Bean 上,而非 Object 类
你不能给 Object 类本身加注解,而是给继承或使用它的具体类(比如 User、Order)的字段加注解:
-
错误写法:
Object obj = new Object(); // 无法在 Object 上声明 @NotNull -
正确写法:
public class User { @NotNull private String name; @Min(18) private int age; // getter/setter... }
用 Validator 工具校验对象实例
有了带注解的类后,需借助 Validator 进行运行时校验:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 获取默认校验器:
Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); - 调用
validate()方法传入对象实例(如new User()) - 返回
Set<ConstraintViolation<T>>,遍历可获取所有校验失败信息
结合 Spring 可进一步简化(@Valid / @Validated)
在 Spring 环境中,无需手动调用 Validator,可通过以下方式自动触发:
立即学习“Java免费学习笔记(深入)”;
- Controller 方法参数加
@Valid,配合@RequestBody自动校验入参对象 - Service 方法加
@Validated+ 参数级注解,配合 AOP 实现方法级校验 - 全局异常处理器捕获
MethodArgumentNotValidException或ConstraintViolationException统一返回错误信息
注意:Object 类型变量无法直接校验,需明确实际类型
如果方法接收的是 Object 类型参数(如 void process(Object obj)),校验会失效,因为注解元数据只存在于具体子类字段上,且 Validator 需要泛型类型信息才能解析约束。应改为:
- 使用泛型方法:
<T> void process(@Valid T obj)(仍需 T 是带注解的实体类) - 或强制转型后校验:
if (obj instanceof User) validator.validate((User) obj);

















