在使用spring mvc时,经常会用的validate,这里是对validate做一个简单的总结。
对于validate的验证是基于spring-boot-2.6.2 或 spring-webmvc-5.3.14 版本
1 ). 对于spring boot项目需要在pom.xml中添加如下依赖。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
2 ). 对于spring-mvc项目,需要在pom.xml中添加如下依赖
<dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.2.0.Final</version> <scope>compile</scope> </dependency>
注解 | 描述 |
---|---|
@Valid | 被注释的元素是一个对象,需要检查此对象的所有字段值 |
@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(value) | 被注释的元素必须符合指定的正则表达式 |
被注释的元素必须是电子邮箱地址 | |
@Length(min=, max=) | 被注释的字符串的大小必须在指定的范围内 |
@NotEmpty | 被注释的字符串的必须非空 |
@Range(min=, max=) | 被注释的元素必须在合适的范围内 |
以注解@NotNull为例
controller代码如下:
import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @Controller @RequestMapping("/api") @Validated @Slf4j public class HelloController { @PostMapping("/hello" ) @ResponseBody public String hello(@RequestBody @Validated RequestVo requestVo ) { log.info("接收参数={}",requestVo); // log.info(file.getOriginalFilename()); return "success"; } }
RequestVo对象代码如下
import lombok.Data; import lombok.ToString; import javax.validation.constraints.NotNull; import java.time.LocalDateTime; @ToString @Data public class RequestVo { private Integer id; @NotNull(message ="name不能为空") private String name; private LocalDateTime dateTime; }
例如:
import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.hibernate.validator.constraints.Length; @Controller @RequestMapping("/api") @Slf4j @Validated public class HelloController { @PostMapping("/testLength" ) @ResponseBody public String testLength(@RequestBody @Length(min=10, max=20) String name ) { // log.info(file.getOriginalFilename()); return "hello " + name; } }
对于springboot项目一定要在controller项目上加入@Validated注解,否则@Length不会生效
对于springMvc项目除了要添加@Validated注解意外,还需要添加一个MethodValidationPostProcessor如下
package com.validation.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Lazy; import org.springframework.core.env.Environment; import org.springframework.validation.beanvalidation.MethodValidationPostProcessor; import javax.validation.Validator; @Configuration public class ValidationConfig { @Bean public static MethodValidationPostProcessor methodValidationPostProcessor(Environment environment, @Lazy Validator validator) { MethodValidationPostProcessor processor = new MethodValidationPostProcessor(); boolean proxyTargetClass = environment.getProperty("spring.aop.proxy-target-class", Boolean.class, true); processor.setProxyTargetClass(proxyTargetClass); processor.setValidator(validator); return processor; } }