@Valid 和@Validate注解的作用和用法
一 、@valid和 @Validate的作用
@valid和@Validate都是用来校验接收参数的,配合@NotNull ,@NotBlank,@NotEmpty等注解校验接收的参数是否符合预期。
使用这些注解可以让我们的代码看起来更加简洁,减少开发工作量。
二、 @valid的使用和讲解
1. java的JSR303声明了@Valid这类接口,而Hibernate-validator对其进行了实现。如果要使用这个注解,需要在pom文件添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2. 下面上代码的环节到了,首先建立一个实体类Student
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
@Data
public class Student implements Serializable {
/**
* 学生姓名
*/
@NotBlank(message = "name不可以为空")
private String name;
/**
* 学生年龄
*/
@NotNull(message = "age不可以为null")
private Integer age;
/**
* 学生养的动物
*/
@Valid
@NotEmpty(message = "animal不可以为空")
private List<Animal> animal;
}
然后我们在新建一个动物类,Animal,如下
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
@Data
public class Animal implements Serializable {
/**
* 动物名称
*/
@NotBlank(message = "animal 必须要有个名称")
private String name;
}
Controller 方法如下
@RequestMapping(value = "put",method = RequestMethod.POST)
public String put(@RequestBody @Valid Student student, BindingResult bindingResult){
if(bindingResult.hasErrors()){
return bindingResult.getFieldError().getDefaultMessage();
}
log.info("世界好");
return "";
}
代码准备完毕,测试的环节来了,使用postman调用,name不传
**注意事项:
- 使用@valid 注解,实体类里面的对象同样要加上@valid 注解,完成嵌套校验
- 对于返回的错误提示信息,我这里使用的是BingdingResult 进行接收,同样,也可以使用异常拦截器进行统一处理
- @Validate 不可以放在实力内属性上
**