@Valid参数校验
参数校验,校验收参,非空
- pom.xml导包
<!--参数校验注解导包 3个-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.8.Final</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
</dependency>
- 编写Java代码,Controller
@ApiOperation(value = "保存")
@PostMapping("/save")
public String save(@RequestBody @Valid StudentParam param,
BindingResult bindingResult){
if (bindingResult.hasErrors()) {
//拿到所有错误信息
List<ObjectError> allErrors = bindingResult.getAllErrors();
StringBuffer buffer = new StringBuffer();
for (ObjectError allError : allErrors) {
//拼接-遍历的错误
buffer.append(allError.getDefaultMessage()+",");
}
return buffer.toString();
}
return param.toString();
}
param
@Data
@ApiModel("学生参数")
public class StudentParam{
@NotBlank(message = "姓名不能为空")
@ApiModelProperty("姓名")
private String sName;
@NotBlank(message = "课程不能为空")
@ApiModelProperty("课程")
private String course;
@NotNull(message = "成绩不能为空")
@ApiModelProperty("成绩")
private Integer score;
}
运行项目,非空校验出来了。
参数校验常用注解
@NotBlank 不能为空,用于String
@NotNull 不能为空,可用于Integer类型,对象
@NotEmpty 集合不能为空
@Digits 用于校验数字 byte/short/int/long/float/double及其对应的包装类;包装类对象not null时才校验
zhangji12138: 没有哦 要么 对于需要1:n的子表数据不走sql 而是在业务里一次性查询出来 再用id去匹配
小柒v: 有没有好的解决方案
zhangji12138: 这种用法对于每一条数据相当于都执行了一遍你的子查询 数据量大的时候性能很差 一对多分页的N+1问题
小柒v: 没明白,讲详细一点?
zhangji12138: 会有N+1的问题