一个通用的参数校验方法,简单又好用
前言
一般我们校验,最简单的就是在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: 帐号不能为空