[size=medium]
1. Java 的static 方法无法访问泛型类的类型参数,所以如果static 方法需要使用泛型能力,就必须使其称为泛型方法。
[/size]
1. Java 的static 方法无法访问泛型类的类型参数,所以如果static 方法需要使用泛型能力,就必须使其称为泛型方法。
[/size]
public class DomainObjectValidator {
private static final Logger LOGGER = LoggerFactory.getLogger(DomainObjectValidator.class);
public static Validator getInstance() {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
return factory.getValidator();
}
public static <T> boolean isDomainObjectValid(T object) {
boolean result = true;
if (object != null) {
Set<ConstraintViolation<T>> constraintViolations = getInstance().validate(object);
if (constraintViolations.size() > 0) {
result = false;
for (ConstraintViolation violation : constraintViolations) {
LOGGER.info("filed={}, msg={}, currentValue={}.",
violation.getPropertyPath().toString(),
Objects.toString(violation.getMessage()),
Objects.toString(violation.getInvalidValue())
);
}
}
}
return result;
}
public static <T> Set<ValidateMessage> validateDomainObject(T object) {
Set<ValidateMessage> validateMessageSet = new HashSet<>();
if (object != null) {
Set<ConstraintViolation<T>> constraintViolations = getInstance().validate(object);
if (constraintViolations.size() > 0) {
for (ConstraintViolation violation : constraintViolations) {
ValidateMessage message = new ValidateMessage(
violation.getPropertyPath().toString(),
Objects.toString(violation.getMessage()),
Objects.toString(violation.getInvalidValue())
);
validateMessageSet.add(message);
}
}
}
return validateMessageSet;
}
}