@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中做验证

  1. @Null 限制只能为null
  2. @NotNull 限制必须不为null
  3. @AssertFalse 限制必须为false
  4. @AssertTrue 限制必须为true
  5. @DecimalMax(value) 限制必须为一个不大于指定值的数字
  6. @DecimalMin(value) 限制必须为一个不小于指定值的数字
  7. @Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
  8. @Future 限制必须是一个将来的日期
  9. @Max(value) 限制必须为一个不大于指定值的数字
  10. @Min(value) 限制必须为一个不小于指定值的数字
  11. @Past 限制必须是一个过去的日期
  12. @Pattern(value) 限制必须符合指定的正则表达式
  13. @Size(max,min) 限制字符长度必须在min到max之间
  14. @Past 验证注解的元素值(日期类型)比当前时间早
  15. @NotEmpty 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
  16. @NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格
  17. @Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式

经常用,做个记录,方便查看