Validator

64 阅读1分钟

参考

juejin.cn/post/710913…

校验工具类

import org.apache.commons.collections.CollectionUtils;
​
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import java.util.Set;
import java.util.stream.Collectors;
​
/**
 * @description:
 */
public class ConsumerValidationUtils {
​
    /**
     * 校验器
     */
    private static final Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
​
    /**
     * 分割符
     */
    private static final String DELIMITER = " ; ";
​
    /**
     * 验证某个对象所有字段
     *
     * @param validateObj
     * @param <T>
     * @return
     */
    public static <T> void validateEntity(T validateObj) {
        Set<ConstraintViolation<T>> validateResult = validator.validate(validateObj, new Class[0]);
        if (!CollectionUtils.isEmpty(validateResult)) {
            String errorMessage = validateResult.stream().map(ConstraintViolation::getMessage).collect(Collectors.joining(DELIMITER));
            throw new BusinessException(errorMessage);
        }
    }
​
    /**
     * 验证某个对象某个字段
     *
     * @param validateObj
     * @param propertyName
     * @param <T>
     * @return
     */
    public static <T> void validateProperty(T validateObj, String propertyName) {
        Set<ConstraintViolation<T>> validateResult = validator.validateProperty(validateObj, propertyName, new Class[0]);
        if (!CollectionUtils.isEmpty(validateResult)) {
            String errorMessage = validateResult.stream().map(ConstraintViolation::getMessage).collect(Collectors.joining(DELIMITER));
            throw new BusinessException(errorMessage);
        }
    }
​
}
​

统一异常处理

@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler implements ResponseBodyAdvice {
​
    /**
     * ValidationException 异常处理
     * @param e
     * @return
     */
    @ExceptionHandler(value = {BindException.class, ValidationException.class, MethodArgumentNotValidException.class})
    @ResponseBody
    public ResultModel handleValidatedException(Exception e) {
        ResultModel instance = ResultModel.instance();
        String errorMessage = "";
        if (e instanceof MethodArgumentNotValidException) {
            MethodArgumentNotValidException ex = (MethodArgumentNotValidException) e;
            errorMessage = ex.getBindingResult().getAllErrors().stream()
                    .map(ObjectError::getDefaultMessage)
                    .collect(Collectors.joining("; "));
​
        } else if (e instanceof ConstraintViolationException) {
            ConstraintViolationException ex = (ConstraintViolationException) e;
​
            errorMessage = ex.getConstraintViolations().stream()
                    .map(ConstraintViolation::getMessage)
                    .collect(Collectors.joining("; "));
        } else if (e instanceof BindException) {
            BindException ex = (BindException) e;
            errorMessage = ex.getAllErrors().stream()
                    .map(ObjectError::getDefaultMessage)
                    .collect(Collectors.joining("; "));
        }
        instance.setMessage(errorMessage);
        return instance;
    }
}
​
@Length长度必须在指定范围内
@NotNull被注解的元素不行不为null
@NotBlank字符串不能为null,字符串trim()后也不能等于“”
@NotEmpty不能为null,集合、数组、map等size()不能为0;字符串trim()后可以等于“”