@Valid 使用

@Valid 使用

作用
@Valid注解用于校验,所属的包: javax.validation.Valid。而在Springboot启动器的web包已经含有该包,所以无需添加多余的依赖

你可以定义实体,在实体的属性上添加校验规则,在API接收数据时添加@Valid注解,这时你的实体将会开启一个校验的功能

示例

  1. controller
    在参数对象前加@Valid
   @PostMapping("/add")
   public R<Boolean> add(@Valid @RequestBody AddCategoryReq AddCategoryReq ) {
       return barrageGroupService.add(AddCategoryReq );
   }
  1. vo
    对象上
	@Size(min=2, max=5)
	@NotNull(message = "name不能为null")
    private String name;
	
	@NotNull(message = "type不能为null")
	@Max(3)
    private Integer type;
	
	@NotNull(message = "parentId不能为null")
    private Integer parentId;
	
	@NotNull(message = "orderNum不能为null")
    private Integer orderNum;
  1. 编写全局异常捕捉
@RestControllerAdvice
public class GlobalExceptionHandler{
	/**
     * 自定义验证异常
     * MethodArgumentNotValidException 方法参数无效异常
     */
@ExceptionHandler(MethodArgumentNotValidException.class)
    public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e)
    {
        log.error(e.getMessage(), e);
        String message = e.getBindingResult().getFieldError().getDefaultMessage();
        return AjaxResult.error(message);
    }
    
}

参数校验使用注解

注解 解释
@Null 用于基本类型上,限制只能为null
@NotNull 用在基本类型上;不能为null,但可以为empty
@NotEmpty 用在集合类上面;不能为null,而且长度必须大于0
@NotBlank 用在String上面;只能作用在String上,不能为null,而且调用trim()后,长度必须大于0
@AssertFalse 限制必须为false
@AssertTrue 限制必须为true
@Digits 验证 Number 和 String 的构成是否合法
@DecimalMax(value) 限制必须为一个不大于指定值的数字,小数存在精度
@DecimalMin(value) 限制必须为一个不小于指定值的数字,小数存在精度
@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Size(max,min) 限制字符长度必须在min到max之间
@Max(value) 限制必须为一个不大于指定值的数字
@Min(value) 限制必须为一个不小于指定值的数字
@Past 限制必须是一个过去的日期
@Future 限制必须是一个将来的日期
@Pattern(value) 限制必须符合指定的正则表达式
@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email

**@Valid 使用 和@Validate注解 区别 **

  1. @Validate 是对@Valid 的封装
  2. @Validate 可以进行分组验证 一个对象中都写了验证而你只需要验证该方法需要的验证时使用
    建两个空接口
public interface BasicInfo {
}
public interface AdvanceInfo {
}

对象

public class UserAccount {

    @NotNull(groups = BasicInfo.class)
    @Size(min = 4, max = 15, groups = BasicInfo.class)
    private String password;

    @NotBlank(groups = BasicInfo.class)
    private String name;

    @Min(value = 18, message = "Age should not be less than 18", groups = AdvanceInfo.class)
    private int age;

    @NotBlank(groups = AdvanceInfo.class)
    private String phone;
}

controller 只验证Basicinfo 分组的内容

@RequestMapping(value = "/saveBasicInfoStep1", method = RequestMethod.POST)
public String saveBasicInfoStep1(
  @Validated(BasicInfo.class) 
  @ModelAttribute("useraccount") UserAccount useraccount, 
  BindingResult result, ModelMap model) {
    if (result.hasErrors()) {
        return "error";
    }
    return "success";
}

你可能感兴趣的:(java,开发语言)