失效链接处理 |
Spring Boot Validation 教程 PDF 下蝲
本站整理下蝲Q?/strong>
链接Q?a target="_blank">https://pan.baidu.com/s/1uy5KYlzdjw38tJyPITwOiA
提取码:(x)ytnj
相关截图Q?/strong>
![]()
主要内容Q?/strong>
众所周知Q在实际的开发过E中无法避免的需要对输入参数q行校验Q?不ؓ(f)I、最大倹{最?{,?/div>
处写校验的代码很J琐也让代码看v来很凌ؕ。Jakarta有一个项目Bean ValidationQ正是ؓ(f)解决q个
问题而诞生的。而Spring Boot它很好的集成进来,香?/div>
但是在用过E中?x)有一些坑Q徏议在使用之前先系l地学习(fn)下,避免采坑。这文章就惌录下
Spring Boot Validation的用方式和注意炏V?/div>
代码
文章涉及(qing)的所有代码都在GitHub上?/div>
引入Validation
Spring为Validation提供?jin)一个starterQ?spring-boot-starter-validation
Maven方式引入
Gradle方式引入
正常情况下不需要添加版本号QSpring Boot 框架?x)在parent pom中指定版本,如果需要添加指定版?/div>
的jar包,可以在这里查找?/div>
当然你也可以使用其他的Validation实现Q比?[hibernate validator] (https://search.maven.org/search?q=g:org.hibernate.validator%20AND%20a:hibernate- validator&core=gav) Q听说他是目前用最q泛的validation实现。如果引入了(jin) hibernate validator Q就可以不用引入 spring-boot-starter-validation 实现?/div>
Bean Validation 在Spring MVC Controller上的应用
Bean Validation 通过Annotation的方式来使用Q如Q?@NotEmpty @Max @Min {,所有的注解可以
在这里找到。直接看例子Q?/div>
验证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
q里 @NotEmpty 要求 param 参数不能为空Q包括null和空字符丌Ӏ?message 为报错的时候的提示
信息?/div>
@Min 要求id不能于10Q提CZ?message 如果不定义则使用默认提示信息Q默认提CZ息是什
么样的,在文章的后面?x)介l?/div>
我们必须在Controller的类U别d @Validated Q告诉Spring框架触发参数校验?/div>
如果校验p|QSpring框架?x)抛出异常?x) ConstraintViolationException Spring没有默认对这
个类型的异常处理器,所以会(x)Dhq回500错误。如果想要修改异常是的Http stausQ我们可
以添加一个自定义异常处理Q?/div>
文章的后面我们会(x)讨论如何更优雅地处理错误Qƈ攑֛l用户友好的提示?/div>
验证RequestBody合法?/div>
当ControllerҎ(gu)需要接收的参数很多Ӟ我们需要通过一个Pojo来接ӞSpring Boot Validation也提
供了(jin)q种情况下的验证方式。比如我们的Pojo如下Q?/div>
public class ValidationTestController { @GetMapping("/example1") String validateExample1(@NotEmpty(message = "不可以ؓ(f)I?quot;) @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
姓名不能为空
q龄?-60?/div>
臛_要有一个喜?/div>
下面是用这个内Ҏ(gu)接收数据的示例:(x)
我们需要在q种参数前面d @RequestBody 注解来要求Spring接收 student 的数据,同时d
@Valid 注解要求Spring验证 student 中的数据?/div>
如果q里的student中有l合对象Q比如学校schoolQ而学校又是一个对象,包含地址Q名U等?/div>
性,要验证这U组合对象时Q也要在学校的对象上d@Valid参数?/div>
试Q?/div>
@Min(value = 3, message = "3岁以下小朋友别q来") @Max(value = 60, message = "60岁以上老爷爷也别过?quot;) private int age; @Size(min = 1, message = "臛_要有一个喜?quot;) 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
|