likes
comments
collection
share

SpringBoot接口参数校验

作者站长头像
站长
· 阅读数 8

1 前言

说起参数校验我们应该不陌生了,参数校验确保输入数据的完整性和一致性,防止无效或不合法的数据被传递到后端。那么你会如何对参数进行校验,使用if-else?这样不仅会造成代码冗余,我们写起来也麻烦。下面就来介绍使用SpringBoot Validation来优雅的对参数进行校验。

2 实现

2.1 引入依赖

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

2.2 单个或多个参数校验

  • controler上添加Validated注解开启接口校验
  • 接口参数前使用校验注解(校验注解详情请看后面)
package com.example.controller;

@RestController
@Validated
public class TestController {
    @PostMapping("/test1")
    public String test1(@Length(min = 3, max = 15) String username) {
        System.out.println(username);

        return "请求成功";
    }
}

2.3 对象校验

项目中POST请求经常会接收一个对象,那么该如何对一个对象进行校验呢?下面讲介绍

  • 提供对象,属性上添加校验规则
  • @Data注解是Lombok中的一个注解,它主要用于自动生成Java类的一些通用方法,如toString、equals、hashCode和所有字段的getter和setter方法
package com.example.entity;

@Data
public class User {
    @Length(min = 3, max = 15)
    private String username;
    @Length(min = 3, max = 15)
    private String password;
}
  • controler上添加Validated注解开启接口校验,接口参数前使用Valid注解校验对象
package com.example.controller;

@RestController
@Validated
public class TestController {
    PostMapping("/test2")
    public String test2(@Valid User user) {
        System.out.println(user);
        return "请求成功";
    }
}

2.4 异常处理

  • ConstraintViolationException:单个或多个参数校验失败
  • MethodArgumentNotValidException:对象参数校验失败
package com.example.controller;

@RestControllerAdvice
@Slf4j
public class ProjectExceptionAdvice {
    @ExceptionHandler({ConstraintViolationException.class, MethodArgumentNotValidException.class})
    public String error(Exception e){
        log.info("请求参数异常!", e);

        return Result.fail(400, "请求参数异常!");
    }
}

3 校验注解

3.1 空值检查

注解说明
@NotBlank用于字符串,字符串不能为null 也不能为空字符串
@NotEmpty字符串同上,对于集合(Map,List,Set)不能为空,必须有元素
@NotNull不能为 null

3.2 数值检查

注解说明
@DecimalMax(value)被注释的元素必须为数字,其值必须小于等于指定的值
@DecimalMin(value)被注释的元素必须为数字,其值必须大于等于指定的值
@Digits(integer, fraction)被注释的元素必须为数字,其值的整数部分精度为 integer,小数部分精度为 fraction
@Positive被注释的元素必须为正数
@PositiveOrZero被注释的元素必须为正数或 0
@Max(value)被注释的元素必须小于等于指定的值
@Min(value)被注释的元素必须大于等于指定的值
@Negative被注释的元素必须为负数
@NegativeOrZero被注释的元素必须为负数或 0

3.3 Boolean 检查

注解说明
@AssertFalse被注释的元素必须值为 false
@AssertTrue被注释的元素必须值为 true

3.4 长度检查

注解说明
@Size(min,max)被注释的元素长度必须在 min 和 max 之间,可以是 String、Collection、Map、数组

3.5 日期检查

注解说明
@Future被注释的元素必须是一个将来的日期
@FutureOrPresent被注释的元素必须是现在或者将来的日期
@Past被注释的元素必须是一个过去的日期
@PastOrPresent被注释的元素必须是现在或者过去的日期

3.6 其他检查

注解说明
@Email被注释的元素必须是电子邮箱地址
@Pattern(regexp)被注释的元素必须符合正则表达式