Skip to content

Latest commit

 

History

History
121 lines (72 loc) · 2.91 KB

4_请求参数校验.md

File metadata and controls

121 lines (72 loc) · 2.91 KB

请求参数校验

我们需要对传入后端的数据再进行一遍校验,避免用户绕过浏览器直接通过一些 HTTP 工具直接向后端请求一些违法数据。Spring Boot 程序做请求参数校验,需要引入 spring-boot-starter-web 依赖。

常用校验注解

JSR 校验注解

  • @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=)

    被注释的元素必须符合指定的正则表达式

Hibernate Validator 校验注解

  • @NotBlank(message =)

    验证字符串非 null,且长度必须大于 0

  • @Email

    被注释的元素必须是电子邮箱地址

  • @Length(min=,max=)

    被注释的字符串的大小必须在指定的范围内

  • @NotEmpty

    被注释的字符串的必须非空

  • @Range(min=,max=,message=)

    被注释的元素必须在合适的范围内

验证请求参数 Path Variables 和 Request Parameters

@RestController
@RequestMapping("/api")
// 使用 @Validated 注解,告诉 Spring 去校验方法参数。
@Validated
public class PersonController {

    @GetMapping("/person/{id}")
    // 校验请求参数 Path Variables
    public ResponseEntity<Integer> getPersonByID(@Valid @PathVariable("id") @Max(value = 5,message = "超过 id 的范围了") Integer id) {
        return ResponseEntity.ok().body(id);
    }

    @PutMapping("/person")
    // 校验请求参数 Request Parameters
    public ResponseEntity<String> getPersonByName(@Valid @RequestParam("name") @Size(max = 6,message = "超过 name 的范围了") String name) {
        return ResponseEntity.ok().body(name);
    }
}

验证请求体

在需要验证的参数上加上了@Valid 注解,如果验证失败,它将抛出 MethodArgumentNotValidException。默认情况下,Spring 会将此异常转换为 HTTP Status 400(错误请求)。

@RestController
@RequestMapping("/api")
public class PersonController {

    @PostMapping("/person")
    public ResponseEntity<Person> getPerson(@RequestBody @Valid Person person) {
        return ResponseEntity.ok().body(person);
    }
}