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