Java Bean Validation 提供了许多有用的注解来验证字段的有效性。以下是一些常用的验证注解:
1. @NotNull
- 目的:确保被注解的字段不为
null
。 - 适用对象:可以用于任何类型的对象,包括字符串、集合、数字等。
- 注意:如果字段的值是空字符串(
""
),该注解不会触发验证失败。
@NotNull(message = "Name cannot be null")
private String name;
2. @NotEmpty
- 目的:确保被注解的字段不为
null
且字符串或集合不为空。 - 适用对象:通常用于
String
类型、集合(如List
、Set
)等。 - 注意:如果字段的值是
null
或空字符串(""
),会触发验证失败。
@NotEmpty(message = "Email cannot be empty")
private String email;
3.@NotBlank
- 目的:确保字符串不为
null
、空字符串(""
)或仅包含空格。 - 适用对象:仅适用于
String
类型。 - 目的:确保字符串不为
null
、空字符串(""
)或仅包含空格。 - 适用对象:仅适用于
String
类型。
@NotBlank(message = "Name cannot be blank")
private String name;
4.@Size
- 目的:验证字符串、集合、数组的大小。
- 适用对象:
String
、集合、数组等。 - 参数:
min
和max
指定大小范围。
@Size(min = 1, max = 50, message = "Name must be between 1 and 50 characters")
private String name;
5.@Email
- 目的:验证字符串是否符合电子邮件格式。
- 适用对象:仅适用于
String
类型。
@Email(message = "Email should be valid")
private String email;
6.@Min
和 @Max
- 目的:验证数值的最小值和最大值。
- 适用对象:
int
、Integer
、long
、Long
、BigDecimal
等。
@Min(value = 0, message = "Age must be at least 0")
private int age;
@Max(value = 120, message = "Age must be less than or equal to 120")
private int age;
7.@Pattern
- 目的:验证字符串是否匹配给定的正则表达式。
- 适用对象:仅适用于
String
类型。
@Pattern(regexp = "^[a-zA-Z0-9]+$", message = "Username can only contain alphanumeric characters")
private String username;
8.@Future
和 @Past
- 目的:验证日期字段是否在未来或过去。
- 适用对象:
java.util.Date
、java.time
包中的类 -
@Future(message = "Date must be in the future") private LocalDate appointmentDate; @Past(message = "Date must be in the past") private LocalDate birthDate;
9.处理验证错误(异常处理)
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import java.util.HashMap;
import java.util.Map;
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<Map<String, String>> handleValidationExceptions(MethodArgumentNotValidException ex) {
Map<String, String> errors = new HashMap<>();
ex.getBindingResult().getFieldErrors().forEach(error -> {
errors.put(error.getField(), error.getDefaultMessage());
});
return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST);
}
}
也有注解@RestControllerAdvice 也是相同的作用,可以具体看看这两个注解。ResponseEntity<Map<String, String>> 这是一个返回值类型,可以自定义一个返回类型用来进行处理。