All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.hiboot.mcn.autoconfigure.web.exception.handler.ValidationExceptionHandler Maven / Gradle / Ivy

There is a newer version: 3.3.1
Show newest version
package cn.hiboot.mcn.autoconfigure.web.exception.handler;

import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import javax.validation.ValidationException;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * ValidationExceptionHandler
 *
 * @author DingHao
 * @since 2022/1/13 22:00
 */
public class ValidationExceptionHandler{

    public static boolean support(Throwable exception){
        return exception instanceof ValidationException;
    }

    public static List handle(Throwable exception) {
        return handleValidationException((ValidationException) exception);
    }

    private static List handleValidationException(ValidationException exception){
        List data = null;
        if (exception instanceof ConstraintViolationException) {
            ConstraintViolationException cve = (ConstraintViolationException) exception;
            data = cve.getConstraintViolations().stream().map(violation ->
                    new ValidationErrorBean(violation.getMessage(), getViolationPath(violation), getViolationInvalidValue(violation.getInvalidValue()))
            ).collect(Collectors.toList());
        }
        return data;
    }

    private static String getViolationInvalidValue(Object invalidValue) {
        if (invalidValue == null) {
            return null;
        } else {
            if (invalidValue.getClass().isArray()) {
                if (invalidValue instanceof Object[]) {
                    return Arrays.toString((Object[]) invalidValue);
                }

                if (invalidValue instanceof boolean[]) {
                    return Arrays.toString((boolean[]) invalidValue);
                }

                if (invalidValue instanceof byte[]) {
                    return Arrays.toString((byte[]) invalidValue);
                }

                if (invalidValue instanceof char[]) {
                    return Arrays.toString((char[]) invalidValue);
                }

                if (invalidValue instanceof double[]) {
                    return Arrays.toString((double[]) invalidValue);
                }

                if (invalidValue instanceof float[]) {
                    return Arrays.toString((float[]) invalidValue);
                }

                if (invalidValue instanceof int[]) {
                    return Arrays.toString((int[]) invalidValue);
                }

                if (invalidValue instanceof long[]) {
                    return Arrays.toString((long[]) invalidValue);
                }

                if (invalidValue instanceof short[]) {
                    return Arrays.toString((short[]) invalidValue);
                }
            }

            return invalidValue.toString();
        }
    }

    private static String getViolationPath(ConstraintViolation violation) {
        String rootBeanName = violation.getRootBean().getClass().getSimpleName();
        String propertyPath = violation.getPropertyPath().toString();
        if("".equals(propertyPath)){
            return rootBeanName;
        }
        int index = propertyPath.lastIndexOf(".");
        if(index != -1){
            return propertyPath.substring(index + 1);
        }
        return rootBeanName + '.' + propertyPath;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy