失效链接处理 |
Spring Boot Validation 教程 PDF 下载
本站整理下载:
相关截图:
主要内容:
众所周知,在实际的开发过程中无法避免的需要对输入参数进行校验, 不为空、最大值、最小值 等,到
处写校验的代码很繁琐也让代码看起来很凌乱。Jakarta有一个项目Bean Validation,正是为解决这个
问题而诞生的。而Spring Boot将它很好的集成进来,香。
但是在使用过程中会有一些坑,建议在使用之前先系统地学习下,避免采坑。这篇文章就想记录下
Spring Boot Validation的使用方式和注意点。
代码
文章涉及的所有代码都在GitHub上。
引入Validation
Spring为Validation提供了一个starter, spring-boot-starter-validation
Maven方式引入
Gradle方式引入
正常情况下不需要添加版本号,Spring Boot 框架会在parent pom中指定版本,如果需要添加指定版本
的jar包,可以在这里查找。
当然你也可以使用其他的Validation实现,比如 [hibernate validator] (https://search.maven.org/search?q=g:org.hibernate.validator%20AND%20a:hibernate- validator&core=gav) ,听说他是目前使用最广泛的validation实现。如果引入了 hibernate validator ,就可以不用引入 spring-boot-starter-validation 实现。
Bean Validation 在Spring MVC Controller上的应用
Bean Validation 通过Annotation的方式来使用,如: @NotEmpty @Max @Min 等,所有的注解可以
在这里找到。直接看例子:
验证RequestParam和PathVariables
<dependency><groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> 12341 implementation('org.springframework.boot:spring-boot-starter-validation') @RestController @Validated @RequestMapping("/validation") 123
这里 @NotEmpty 要求 param 参数不能为空,包括null和空字符串。 message 为报错的时候的提示
信息。
@Min 要求id不能小于10,提示信息 message 如果不定义则使用默认提示信息,默认提示信息是什
么样的,在文章的后面会介绍。
我们必须在Controller的类级别添加 @Validated ,告诉Spring框架触发参数校验。
如果校验失败,Spring框架会抛出异常: ConstraintViolationException Spring没有默认对这
个类型的异常处理器,所以会导致请求返回500错误。如果想要修改异常是的Http staus,我们可
以添加一个自定义异常处理:
文章的后面我们会讨论如何更优雅地处理错误,并放回给用户友好的提示。
验证RequestBody合法性
当Controller方法需要接收的参数很多时,我们需要通过一个Pojo来接收,Spring Boot Validation也提
供了这种情况下的验证方式。比如我们的Pojo如下:
public class ValidationTestController { @GetMapping("/example1") String validateExample1(@NotEmpty(message = "不可以为空") @RequestParam String param) { return "valid"; }@GetMapping("/example2/{id}") String validateExample2(@Min(value = 10, message = "ID不能小于10") @PathVariable String id) { return "valid"; } } 456789101112131415 @RestController @Validated @RequestMapping("/validation") public class ValidationTestController { // ... @ExceptionHandler(ConstraintViolationException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) @GetMapping("/example3/{id}") String validateExample3(@Min(value = 10, message = "ID不能小于10") @PathVariable String id) { return "valid"; } } 1234567891011121314 @Data public class Student { private int id; @NotEmpty(message = "姓名不能为空") private String name; 12345678
姓名不能为空
年龄在3-60岁
至少要有一个喜好
下面是使用这个内容来接收数据的示例:
我们需要在这种参数前面添加 @RequestBody 注解来要求Spring接收 student 的数据,同时添加
@Valid 注解要求Spring验证 student 中的数据。
如果这里的student中有组合对象,比如学校school,而学校又是一个对象,包含地址,名称等属
性,要验证这种组合对象时,也要在学校的对象上添加@Valid参数。
测试:
@Min(value = 3, message = "3岁以下小朋友就别过来") @Max(value = 60, message = "60岁以上老爷爷也别过来") private int age; @Size(min = 1, message = "至少要有一个喜好") private List<String> favorite; } 9101112131415 @RestController @Validated @RequestMapping("/validation") public class ValidationTestController { // .... @PostMapping("/example3/") String validateExample2(@RequestBody @Valid Student student) { return "valid"; }// ... } 1234567891011121314 @Data public class Student { // ... @Valid private School school; @NotEmpty(message = "姓名不能为空") private String name; // ... } 12345678910111213
|