使用 @NotEmpty、@NotBlank、@NotNull 注解进行参数校验
使用 @NotEmpty、@NotBlank、@NotNull 注解进行参数校验
- 一、前言
- 二、依赖
- 三、使用 @NotEmpty、@NotBlank、@NotNull 注解进行参数校验
- 1. @NotNull
- 2. @NotEmpty
- 3. @NotBlank
- 4. 区别与适用场景
- 四、实践中的应用
- 五、总结
一、前言
在 Java 开发中,参数校验是确保数据一致性和系统稳定性的重要环节。@NotEmpty
、@NotBlank
和 @NotNull
是常用的注解,用于对方法参数进行有效性验证。它们主要用于 Bean Validation 框架,尤其是 Hibernate Validator。下面将详细介绍这三个注解的使用方法和区别。
二、依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
三、使用 @NotEmpty、@NotBlank、@NotNull 注解进行参数校验
在Java应用程序中,数据校验是确保数据有效性和一致性的一个重要方面。Spring框架提供了一些有用的注解来帮助我们进行参数校验,其中 @NotEmpty
、@NotBlank
和 @NotNull
是三个常用的注解。本文将详细介绍这三个注解的使用及其适用场景。
1. @NotNull
@NotNull
注解用于确保一个字段的值不能为空。它适用于对象类型的字段(例如,Integer
、String
、List
等),并且不允许该字段的值为 null
。如果字段为 null
,校验将失败,并抛出 ConstraintViolationException
异常。
示例代码:
import javax.validation.constraints.NotNull;
public class User {
@NotNull(message = "Username cannot be null")
private String username;
@NotNull(message = "Age cannot be null")
private Integer age;
// Getters and Setters
}
解释:
- 在上述代码中,
username
和age
字段都使用了@NotNull
注解。这意味着在对象的这些字段值为null
时,校验将失败,并显示自定义的错误消息。
2. @NotEmpty
@NotEmpty
注解用于确保字段的值既不为 null
也不为空。它适用于字符序列(如 String
)、集合(如 List
、Set
)和数组类型。这个注解不仅要求字段不能为空,还要求其内部不能为空(对于集合和数组来说)。
示例代码:
import javax.validation.constraints.NotEmpty;
public class User {
@NotEmpty(message = "Username cannot be empty")
private String username;
@NotEmpty(message = "Roles cannot be empty")
private List<String> roles;
// Getters and Setters
}
解释:
- 在上述代码中,
username
字段和roles
列表都使用了@NotEmpty
注解。username
不能为null
或空字符串,roles
列表不能为null
或空列表。
3. @NotBlank
@NotBlank
注解用于确保字符序列(如 String
)字段的值不为空,并且在去除前后空白字符后,字符串仍有内容。它适用于那些需要确保非空的字符串字段,排除了只包含空白字符的情况。
示例代码:
import javax.validation.constraints.NotBlank;
public class User {
@NotBlank(message = "Username cannot be blank")
private String username;
@NotBlank(message = "Email cannot be blank")
private String email;
// Getters and Setters
}
解释:
- 在上述代码中,
username
和email
字段使用了@NotBlank
注解。username
和email
字段不仅要求不能为空,还要求去除空白字符后不为空。
4. 区别与适用场景
- @NotNull 适用于需要确保字段不为
null
的情况,但它允许空字符串和空集合。 - @NotEmpty 适用于需要确保字段既不为
null
也不为空的情况,包括空字符串和空集合。 - @NotBlank 适用于需要确保字符序列字段不为
null
、不为空且不只包含空白字符的情况。
四、实践中的应用
在Spring Boot应用中,通常将这些注解用于模型类(如 @Entity
或 @Data
类),以确保数据的有效性。此外,这些注解通常与Spring的 @Valid
注解一起使用,以触发自动校验。
可以通过在类上加 @Validated
注解或在方法参数上加 @Valid
注解来启用校验功能。
控制器中的示例:
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
@RestController
@RequestMapping("/users")
@Validated
public class UserController {
@PostMapping
public void createUser(@Valid @RequestBody User user) {
// 处理创建用户的逻辑
}
}
解释:
- 在上述代码中,
createUser
方法使用了@Valid
注解来触发对User
对象的校验。如果User
对象的字段不符合@NotNull
、@NotEmpty
或@NotBlank
的规则,Spring 会自动返回校验错误信息。
五、总结
@NotNull
、@NotEmpty
和 @NotBlank
注解为Java应用中的数据校验提供了灵活且强大的支持。通过合理使用这些注解,可以提高代码的健壮性和数据的可靠性。理解它们的区别及适用场景,对于构建健壮的应用程序至关重要。