Spring Boot 参数校验

1、常用注解

  • @NotNull :确保字段的值不能为 null
java 复制代码
@NotNull(message = "用户名不能为空")
private String username;
  • @NotEmpty :确保字符串不能为 null 或空字符串 ""
java 复制代码
@NotEmpty(message = "密码不能为空")
private String password;
  • @NotBlank :确保字符串不能为 null 或空格字符(包括空格、tab 等)。
java 复制代码
@NotBlank(message = "用户名不能为空")
private String username;
  • @Size:用于约束字符串、集合、数组的大小。
java 复制代码
@Size(min = 5, max = 20, message = "用户名长度必须在 5 到 20 个字符之间")
private String username;
  • @Min 和 @Max:用于对数字进行大小校验。
java 复制代码
@Min(value = 18, message = "年龄必须大于等于 18 岁")
private int age;

@Max(value = 100, message = "年龄不能超过 100 岁")
private int age;
  • @Email:用于校验邮箱格式。
java 复制代码
@Email(message = "邮箱格式不正确")
private String email;
  • @Pattern:用于校验字符串是否匹配正则表达式。
java 复制代码
@Pattern(regexp = "^[A-Za-z0-9]+$", message = "用户名只能包含字母和数字")
private String username;
  • @Range :用于数字范围校验(@Min@Max 的组合)。
java 复制代码
@Range(min = 18, max = 100, message = "年龄必须在 18 到 100 之间")
private int age;
  • @AssertTrue 和 @AssertFalse:用于验证布尔值。
java 复制代码
@AssertTrue(message = "必须为成年人")
private boolean isAdult;
  • @Valid :用于嵌套对象的校验。通常在对象的属性为另一个对象时,使用 @Valid 来触发子对象的校验。
java 复制代码
public class User {
    @Valid
    private Address address;
}

2、Spring Boot中实现参数校验

2.1 引入依赖pom.xml

xml 复制代码
<!-- 参数校验 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

2.2 在实体类上添加校验注解

2.3 在Controller方法参数上添加@Validated

2.4 在全局异常处理中添加参数校验异常处理

java 复制代码
@ExceptionHandler(MethodArgumentNotValidException.class)
public Result<String> handleValidationException(MethodArgumentNotValidException e) {
    String message = e.getBindingResult().getFieldErrors().stream()
            .map(error -> error.getField() + ": " + error.getDefaultMessage())
            .collect(Collectors.joining("; "));
    return Result.error(400, message);
}
相关推荐
niucloud-admin1 分钟前
JAVA V6 多商户商城 开发文档——job 计划任务开发
java·python·github
海宇AI1 小时前
零信任架构实战:基于海宇柠檬查出险-登记证构建自动化车抵贷核保网关
java·人工智能·架构·自动化
Bs_MoneyMagnet2 小时前
基于springboot+vue的心理咨询预约与随访平台的设计与实现 源码+文档
vue.js·spring boot·后端·spring·毕业设计·旅游·计算机毕业设计
cfm_29143 小时前
单例模式详解
java
我叫张土豆3 小时前
本体论、DDD、SDD、TDD:AI 编程时代的四层认知栈
java·人工智能
白远山3 小时前
家政服务家政社区派单实战:调度系统架构设计与实现指南
java·开发语言·小程序·架构·需求分析
海南java第二人3 小时前
从诞生到回收:JVM对象生命周期与垃圾回收全链路解析
java
SL_staff4 小时前
JVS-Logic:从页面配置工具到企业级业务逻辑中枢的技术演进
java·算法·全栈
DevRay4 小时前
Java 21虚拟线程深度实战:告别线程池焦虑,百万并发吞吐量直接翻倍(原理+代码+避坑)
java·开发语言
陌シ未央ゞ4 小时前
基于BM25算法和RRF实现的混合索引(java版)
人工智能·spring boot·后端·算法