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);
}
相关推荐
Wang's Blog1 分钟前
Java框架 SpringCloud 快速入门: 网关的 CORS 跨域配置
java·开发语言·spring cloud
驭渊的小故事5 分钟前
NC229023 题解:二分答案求解“最大化最小值“问题
java·算法
小蒜学长9 分钟前
基于SSM+VUE的电影售票平台的设计与实现(代码+数据库+LW)
java·vue.js·spring boot·后端·ssm框架·电影售票平台
Wang's Blog22 分钟前
Java框架 SpringCloud 快速入门: Feign 替代 RestTemplate 实现声明式远程调用
java·开发语言·spring cloud
谢亮_vipxieliang22 分钟前
Go 结构体与方法集核心知识点
java·开发语言·golang
EatFan30 分钟前
2026 Java 后端面试风向变了:八股文只是门槛,场景化追问才是淘汰线
java·开发语言·jvm·面试·后端面试·八股文·full gc
Q264336502335 分钟前
【有源码】基于Spring Boot+Vue的骑行爱好者平台的设计与实现-计算机毕设选题推荐
java·vue.js·spring boot·毕业设计·课程设计·数据可视化·源代码
xieliyu.37 分钟前
LeetCode 1419 数青蛙:状态模拟求最少青蛙数量|Java 题解
java·算法·leetcode
Wang's Blog39 分钟前
Java框架 SpringCloud 快速入门: 微服务配置拉取
java·spring cloud·微服务
FYKJ_201039 分钟前
SpringSecurity教室智能预约系统73972-计算机课程设计、毕业设计
java·vue.js·spring boot·python·mysql·spring·django