一个通用的参数校验方法,简单又好用

前言

一般我们校验,最简单的就是在Controller方法参数前加@Valid注解,校验不通过时就会直接抛出异常

但是有时候我们除了在controller使用Validation,在其他地方也想使用,那么可以使用以下的校验方法

校验方法

/**
     * 使用@Valid校验对象是否符合要求
     * @param object
     */
    public static void validateObject(@Valid Object object){
          
   
        // 创建Validator校验器并对对象进行校验
        Set<ConstraintViolation<@Valid Object>> validate = Validation.buildDefaultValidatorFactory().getValidator().validate(object, new Class[0]);
        //如果校验不通过,那么返回一个错误信息,如果想返回全部的错误信息,那么可以使用reduce((m1, m2) ->m1+";"+m2 )方法
        if (!CollectionUtils.isEmpty(validate)){
          
   
            String message = validate.stream().map(ConstraintViolation::getMessage).reduce((m1, m2) -> m2 ).orElse("请输入正确的参数!");
            //CommonException是我项目中自定义的异常,你可以抛出自己定义的异常或者IllegalArgumentException
            throw new CommonException(message,ILLEGAL_ARGUMENT);
        }
    }

我们只要在需要校验的对象字段上添加Validation注解(比如:@NotBlank、NotNull等),然后将对象传入该方法,如果不符合方法就会抛出异常

测试

1、定义一个对象

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class TestRequestVo implements Serializable {
          
   

    /**
     *帐号
     */
    @NotBlank(message = "帐号不能为空")
    private String account;


}

2、使用validateObject方法

@Test
    public void testObject(){
          
   
        TestRequestVo build = TestRequestVo .builder().account(null).build();
        CheckUtil.validateObject(build);
    }

输出

com.cmic.common.exception.CommonException: 帐号不能为空
经验分享 程序员 微信小程序 职场和发展