SpringBoot 参数校验

在后端开发的过程中,验证前端参数的合法性是一个必不可少的步骤。但是参数验证会产生大量的样板代码,导致代码可读性差。使用 validator-api 可以简洁优雅的验证参数。

假设后端需要接受前端的请求参数,我们可以这样去做校验:

@GetMapping
public ResponseEntity index(@RequestParam("email") String email) {
  if (null == email || "".equals(email)) {
    return ResponseEntity.badRequest().build();
  }
  return ResponseEntity.ok().build();
}

虽然这样做也能起到校验的作用,但是当参数比较多,参数比较复杂的时候会写大量的校验代码,既麻烦又影响可读性。SpringBoot 可以帮我们简化校验,spring-boot-starter-web 中默认集成了 hibernate-validator 包,它提供了一系列验证各种参数的方法,所以说 SpringBoot 已经帮我们想好要怎么解决这个问题了。上面的例子,可以简化成如下代码:

@GetMapping
public ResponseEntity index(@RequestParam("email") @Email String email) {
  return ResponseEntity.ok().build();
}

@Email 用来验证注解的元素值是Email,也可以通过正则表达式和 flag 指定自定义的 email 格式。这样一来,代码量少了一大截,而且验证规则也可以灵活的自定义。
不仅仅可以对包装类型做校验,如果接收参数是自定义对象,我们也是可以做校验的,例如:

@Data
public class User {
  @Email(message = "错误的邮箱格式")
  private String email;

  @Size(min = 6, max = 30, message = "密码长度应当在 6 ~ 30 个字符之间")
  private String password;
}
@GetMapping
public ResponseEntity index(@Validated @RequestBody User user) {
  return ResponseEntity.ok().build();
}

@Validated 注解开启对对象的校验。下面是一些比较常用的注解:

注解 说明
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max=, min=) 被注释的元素的大小必须在指定的范围内
@Digits(integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(regex=, flag=) 被注释的元素必须符合指定的正则表达式
@NotBlank(message =) 验证字符串非null,且长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=, max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=, max=, message=) 被注释的元素必须在合适的范围内

参考文档:http://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/

你可能感兴趣的:(SpringBoot 参数校验)