SpringBoot的数据校验
第一步、Maven依赖
<!-- 参数校验依赖, 已经集成了2.0.1.Final版本的validation-api -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<!-- 使用hibernate框架的校验器作为实现类 -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
第二步,定义要参数校验的实体类
@Data
public class ValidVO {
private String id;
@Length(min = 6,max = 12,message = "appId长度必须位于6到12之间")
private String appId;
@NotBlank(message = "名字为必填项")
private String name;
@Email(message = "请填写正确的邮箱地址")
private String email;
private String sex;
@NotEmpty(message = "级别不能为空")
private String level;
}
第三步,定义校验类进行测试
需要注意的是:
-
在需要校验的类(控制层类或业务层类)上加入@Validated。
-
单参数校验,直接加校验注解,而不是加@Valid或@Validated。例如@NotBlank
-
传入对象的多参数校验,需要加入@Valid或@Validated,需要将JSON对象转为Java对象还需要加@RequestBody。
@RestController
@Slf4j
@Validated
public class ValidController {
@ApiOperation("RequestBody校验")
@PostMapping("/valid/test1")
public String test1(@Validated @RequestBody ValidVO validVO){
log.info("validEntity is {}", validVO);
return "test1 valid success";
}
@ApiOperation("Form校验")
@PostMapping(value = "/valid/test2")
public String test2(@Validated ValidVO validVO){
log.info("validEntity is {}", validVO);
return "test2 valid success";
}
@ApiOperation("单参数校验")
@PostMapping(value = "/valid/test3")
public String test3(@Email String email){
log.info("email is {}", email);
return "email valid success";
}
}
- 在service层的实现类和service的接口的校验注解必须保持一致,否则会报错。
例如业务层实现类如下:
业务层接口如下: