1. 参数校验
spring-boot-starter-web包里面有hibernate-validator包,不需要引用hibernate validator依赖。
2. hibernate validator校验demo
1. 导入包
import org.hibernate.validator.constraints.NotBlank;
import javax.validation.constraints.AssertFalse;
import javax.validation.constraints.Pattern;
2. demo
@Getter
@Setter
@NoArgsConstructor
public class DemoModel {
@NotBlank(message="用户名不能为空")
private String userName;
@NotBlank(message="年龄不能为空")
@Pattern(regexp="^[0-9]{1,2}$",message="年龄不正确")
private String age;
@AssertFalse(message = "必须为false")
private Boolean isFalse;
/**
* 如果是空,则不校验,如果不为空,则校验
*/
@Pattern(regexp="^[0-9]{4}-[0-9]{2}-[0-9]{2}$",message="出生日期格式不正确")
private String birthday;
}
3. 结果返回
@RequestMapping("/demo2")
public void demo2(@RequestBody @Valid DemoModel demo, BindingResult result){
if(result.hasErrors()){
for (ObjectError error : result.getAllErrors()) {
System.out.println(error.getDefaultMessage());
}
}
}
4. 传入参数
{"userName":"dd","age":120,"isFalse":true,"birthday":"21010-21-12"}
5. 输出结果
出生日期格式不正确
必须为false
年龄不正确
3. hibernate的校验模式
1. 普通模式(默认为该模式)
会校验所有属性,然后返回所有的验证失败信息。
2. 快速失败返回模式
只要有一个校验失败则返回。
3. 设置方式
// failFast: true 快速失败返回模式,false 普通模式
ValidatorFactory validatorFactory = Validation.byProvider( HibernateValidator.class )
.configure()
.failFast( true )
.buildValidatorFactory();
Validator validator = validatorFactory.getValidator();
// hibernate.validator.fail_fast: true 快速失败返回模式,false 普通模式
ValidatorFactory validatorFactory = Validation.byProvider( HibernateValidator.class )
.configure()
.addProperty( "hibernate.validator.fail_fast", "true" )
.buildValidatorFactory();
Validator validator = validatorFactory.getValidator();
4. hibernate的校验
配置hibernate Validator为快速返回模式: @Configuration
public class ValidatorConfiguration {
@Bean
public Validator validator(){
ValidatorFactory validatorFactory = Validation.byProvider( HibernateValidator.class )
.configure()
.addProperty( "hibernate.validator.fail_fast", "true" )
.buildValidatorFactory();
Validator validator = validatorFactory.getValidator();
return validator;
}
}
1. 请求参数校验
验证请求参数时,在 @RequestBody DemoModel demo 之间加注解 @Valid,然后在后面加 BindindResult 即可;多个参数