@Valid 使用
@Valid表单验证
前言,在方法中做参数校验,如果参数很多校验起来也很费功夫,使用!@Valid,注解做校验,代码更加简洁
话不多说,见代码
首先是实体
验证的注解还有很多,如@Empty @Min @Max
然后看一下啊controller方法
public ResultVO addEvaluationTask(@RequestBody @Valid TaskDTO dto, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return ResultVOUtil.error(ResultEnum.ERROR.getCode(), bindingResult.getAllErrors().get(0).getDefaultMessage());
}
if (StringUtils.isBlank(dto.getContaminantName())) {
return ResultVOUtil.error(ResultEnum.ERROR.getCode(), "污染物名称不能为空");
}
if (StringUtils.isBlank(dto.getTaskName())) {
return ResultVOUtil.error(ResultEnum.ERROR.getCode(), "任务名称不能为空");
}
if(dto.getCreateBy()==null){
return ResultVOUtil.error(ResultEnum.ERROR.getCode(),"创建人不能为空");
}
EvaluationTask task = evaluationTaskService.getOne(new QueryWrapper<EvaluationTask>().eq("task_name", dto.getTaskName()));
if(task!=null){
return ResultVOUtil.error(ResultEnum.ERROR.getCode(),"任务名已存在");
}
Map<String, Object> result = evaluationTaskService.insert(dto);
return ResultVOUtil.success(result);
}
因为dto在编辑的接口中也有用,所以,有些参数单独做了验证,理论上都可以在dto中做验证
- @Null 限制只能为null
- @NotNull 限制必须不为null
- @AssertFalse 限制必须为false
- @AssertTrue 限制必须为true
- @DecimalMax(value) 限制必须为一个不大于指定值的数字
- @DecimalMin(value) 限制必须为一个不小于指定值的数字
- @Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
- @Future 限制必须是一个将来的日期
- @Max(value) 限制必须为一个不大于指定值的数字
- @Min(value) 限制必须为一个不小于指定值的数字
- @Past 限制必须是一个过去的日期
- @Pattern(value) 限制必须符合指定的正则表达式
- @Size(max,min) 限制字符长度必须在min到max之间
- @Past 验证注解的元素值(日期类型)比当前时间早
- @NotEmpty 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
- @NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格
- @Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式
经常用,做个记录,方便查看