一、字段校验注解

Spring Boot 提供了一些注解用于校验请求参数、请求体等数据。这些注解类位于 javax.validation.constraints 包中,在springboot2.3以上需要引入pom包。

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>

常用的字段校验注解包括:

  1. @NotNull :验证对象是否为 null,但不验证空字符串。
  2. @NotEmpty :验证对象是否不为 null 且长度大于 0,验证字符串是否不为空。
  3. @NotBlank :只验证字符串不为空,不验证 null 和长度。
  4. @Size(min=, max=) :验证对象(字符串、集合、Map、数组等)长度是否在指定范围内。
  5. @Min(value=) :验证数值是否大于等于指定值。
  6. @Max(value=) :验证数值是否小于等于指定值。
  7. @DecimalMin(value=) :验证 BigDecimal 或 BigInteger 是否大于等于指定值。
  8. @DecimalMax(value=) :验证 BigDecimal 或 BigInteger 是否小于等于指定值。
  9. @Digits(integer=, fraction=) :验证数值是否符合指定的整数位和小数位。
  10. @Email :验证字符串是否是邮箱格式。
  11. @Pattern(regexp=) :验证字符串是否符合指定的正则表达式。

以上是常用的字段校验注解,你可以根据具体需求选择使用。在使用注解进行校验时,需要在控制器的方法入参中添加 @Valid 注解,并在方法参数中添加一个 BindingResult 对象,用于接收校验结果。如果校验结果有错误,可以从 BindingResult 对象中获取错误信息进行处理,bindingResult.hasErrors()判断是否有不满足条件的字段,无则false,有则true。bindingResult.getAllErrors()获取所有的报错信息类通过getDefaultMessage()来获取具体的message,最后将多个message放入一个集合中返回给前端。

实际操作如下:

User类

public class User {
    @NotBlank(message = "用户名不能为空")
    private String name;
    @NotBlank(message = "1234")
    private String password;
}
 
 
Controller接口
 
 
public User aa(@RequestBody @Valid User user, BindingResult bindingResult) {
    if(bindingResult.hasErrors()){
        List<ObjectError> allErrors = bindingResult.getAllErrors();
        for (ObjectError allError : allErrors) {
            System.out.println(allError.getDefaultMessage());
        }
        return user;
    }
    return user;
}

二、字段时间格式注解。

DateTimeFormat和JsonFormat

@DateTimeFormat(pattern = "yyyyMMdd HH:mm:ss")
@JsonFormat(pattern ="yyyyMMdd HH:mm:ss" ,timezone = "GMT+8")
private Date date;

DateTimeFormat主要用于前端向后端传值 ,比如配置pattern=yyyyMMdd HH:mm:ss,那么前端传过来的数据要满足 20220230 12:11:00 它会自动将字符串转换为date存起来,

JsonFormat主要用于后端向前端传值,比如配置pattern=yyyyMMdd HH:mm:ss,那么在controller接口若直接设置Date date=new Date(),直接设置date值传到前端就会直接得到格式化的时间,不需要经过SimpleDateFormat进行格式化,一般加上时区:timezone = “GMT+8”,因为有时@JsonFormat注解格式化时间会不起作用