@notnull校验是否为null(字符串可为空串),@notblank专用于string且trim后长度>0,@notempty用于集合/数组且size>0;均需配合@valid或@validated触发;错误须用@controlleradvice统一捕获并返回结构化json。

直接抓住三个主干:注解怎么用、对象怎么校、错误怎么统。别陷在概念堆里,重点是能写出来、跑得通、不踩坑。
注解用法要分清场景
@NotNull、@NotBlank、@NotEmpty 容易混,记住本质区别:
- @NotNull:只管“不是 null”,字符串填空格或空串也过
- @NotBlank:专治字符串,要求非 null 且 trim 后长度 > 0
- @NotEmpty:用于集合、Map、数组,要求非 null 且 size > 0
- @Min/@Max:只支持 Number 类型,对 String 无效;想校数字字符串得先转类型或自定义
- @Pattern:正则必须完整匹配,手机号写 ^1[3-9]\d{9}$,少 ^ 或 $ 会误判
对象校验必须配对使用
单个字段加注解没用,关键在触发点:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- Body 提交(@RequestBody):参数前加 @Valid,DTO 内嵌套对象字段加 @Valid 才能递归校验
- 路径/查询参数(@PathVariable、@RequestParam):Controller 类上加 @Validated,参数上直接加注解(如 @Min)
- 分组校验:定义接口(如 interface Create {}),DTO 字段用 groups = Create.class,方法参数写 @Validated(Create.class)
错误返回必须全局统一
默认 400 响应体是乱码或 HTML,生产环境必须拦截并格式化:
- 写一个 @ControllerAdvice 类,捕获 MethodArgumentNotValidException(对象校验失败)和 ConstraintViolationException(单参数校验失败)
- 提取所有 field + message,组装成标准 JSON,比如 { "code": 400, "msg": "参数错误", "details": [ {"field": "phone", "message": "手机号格式不正确"} ] }
- 注意:Spring Boot 2.3+ 要显式引入 spring-boot-starter-validation 依赖,否则注解不生效
自定义注解属于进阶项,先确保基础三板斧熟练——能快速写出带校验的接口、看懂报错字段、返回干净错误结构,再考虑封装手机号、身份证等业务规则。










