素材巴巴 > 程序开发 >

参数的校验

程序开发 2023-09-18 20:28:26

一、简述

数据的校验的重要性就不用说了,即使在前端对数据进行校验的情况下,我们还是要对传入后端的数据再进行一遍校验,避免用户绕过浏览器直接通过一些 HTTP 工具直接向后端请求一些违法数据。

JSR(Java Specification Requests) 是一套 JavaBean 参数校验的标准,它定义了很多常用的校验注解,我们可以直接将这些注解加在我们 JavaBean 的属性上面,这样就可以在需要校验的时候进行校验了,非常方便!

校验的时候实际用的是 Hibernate Validator 框架。Hibernate Validator 是 Hibernate 团队最初的数据校验框架,Hibernate Validator 4.x 是 Bean Validation 1.0(JSR 303)的参考实现,Hibernate Validator 5.x 是 Bean Validation 1.1(JSR 349)的参考实现,目前最新版的 Hibernate Validator 6.x 是 Bean Validation 2.0(JSR 380)的参考实现。

SpringBoot 项目的 spring-boot-starter-web 依赖中已经有 hibernate-validator 包,不需要引用相关依赖。如下图所示(通过 idea 插件—Maven Helper 生成):

非 SpringBoot 项目需要自行引入相关依赖包。需要注意的是所有的注解,推荐使用 JSR 注解,即javax.validation.constraints,而不是org.hibernate.validator.constraints。

二、一些常用的字段验证的注解

三、验证请求体(RequestBody)

@Data
 @AllArgsConstructor
 @NoArgsConstructor
 public class Person {@NotNull(message = "classId 不能为空")private String classId;@Size(max = 33)@NotNull(message = "name 不能为空")private String name;@Pattern(regexp = "((^Man$|^Woman$|^UGM$))", message = "sex 值不在可选范围")@NotNull(message = "sex 不能为空")private String sex;    @Email(message = "email 格式不正确")@NotNull(message = "email 不能为空")private String email;
 }
 

在需要验证的参数上加上了@Valid注解,如果验证失败,它将抛出MethodArgumentNotValidException。

@RestController
 @RequestMapping("/api")
 public class PersonController {
 @PostMapping("/person")    
 public ResponseEntity getPerson(@RequestBody @Valid Person person) {return ResponseEntity.ok().body(person);}
 }
 

四、验证请求参数(Path Variables 和 Request Parameters)

一定不要忘记在类上加上 Validated 注解,这个参数可以告诉 Spring 去校验方法参数。

@RestController
 @RequestMapping("/api")
 @Validated
 public class PersonController {    @GetMapping("/person/{id}")   public ResponseEntity getPersonByID(@Valid @PathVariable("id")
 @Max(value = 5,message = "超过 id 的范围了") Integer id) {return ResponseEntity.ok().body(id); }
 }
 

标签:

素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。