| package com.vincent.rsf.common.domain; | 
|   | 
| import com.google.common.collect.Lists; | 
| import com.google.common.collect.Maps; | 
| import com.google.common.collect.Sets; | 
|   | 
| import javax.validation.ConstraintViolation; | 
| import javax.validation.ConstraintViolationException; | 
| import javax.validation.Validator; | 
| import java.util.List; | 
| import java.util.Map; | 
| import java.util.Set; | 
|   | 
| /** | 
|  * ${DESCRIPTION} | 
|  * | 
|  * @author Super-Admin | 
|  * @CreateUser Ryan | 
|  * @CreateTime 2018/6/14 16:12 | 
|  * @ModifyUser YunTao.Zhou | 
|  * @ModifiedTime 2018/6/14 16:12 | 
|  * @Version 1.0 | 
|  */ | 
| public class BeanValidators { | 
|   | 
|     /** | 
|      * | 
|      * @param validator | 
|      * @param list | 
|      * @param groups | 
|      * @throws ConstraintViolationException | 
|      */ | 
|     public static void validateListWithException(Validator validator, List<?> list, Class<?>... groups) | 
|             throws ConstraintViolationException { | 
|         if(list.isEmpty()){ | 
|             return; | 
|         } | 
|         Set constraintViolations = Sets.newHashSet(); | 
|         for (Object o : list) { | 
|             constraintViolations.addAll( validator.validate(o, groups)); | 
|             if (!constraintViolations.isEmpty()) { | 
|                 throw new ConstraintViolationException(constraintViolations); | 
|             } | 
|         } | 
|     } | 
|   | 
|     public static void validateArrayWithException(Validator validator, Object[] array, Class<?>... groups){ | 
|         BeanValidators.validateListWithException(validator, Lists.newArrayList(array),groups); | 
|     } | 
|   | 
|   | 
|     /** | 
|      * 调用JSR303的validate方法, 验证失败时抛出ConstraintViolationException. | 
|      */ | 
|     @SuppressWarnings({ "unchecked", "rawtypes" }) | 
|     public static void validateWithException(Validator validator, Object object, Class<?>... groups) | 
|             throws ConstraintViolationException { | 
|         Set constraintViolations = validator.validate(object, groups); | 
|         if (!constraintViolations.isEmpty()) { | 
|             throw new ConstraintViolationException(constraintViolations); | 
|         } | 
|     } | 
|   | 
|     /** | 
|      * 辅助方法, 转换ConstraintViolationException中的Set<ConstraintViolations>中为List<message>. | 
|      */ | 
|     public static List<String> extractMessage(ConstraintViolationException e) { | 
|         return extractMessage(e.getConstraintViolations()); | 
|     } | 
|   | 
|     /** | 
|      * 辅助方法, 转换Set<ConstraintViolation>为List<message> | 
|      */ | 
|     @SuppressWarnings("rawtypes") | 
|     public static List<String> extractMessage(Set<? extends ConstraintViolation> constraintViolations) { | 
|         List<String> errorMessages = Lists.newArrayList(); | 
|         for (ConstraintViolation violation : constraintViolations) { | 
|             errorMessages.add(violation.getMessage()); | 
|         } | 
|         return errorMessages; | 
|     } | 
|   | 
|     /** | 
|      * 辅助方法, 转换ConstraintViolationException中的Set<ConstraintViolations>为Map<property, message>. | 
|      */ | 
|     public static Map<String, String> extractPropertyAndMessage(ConstraintViolationException e) { | 
|         return extractPropertyAndMessage(e.getConstraintViolations()); | 
|     } | 
|   | 
|     /** | 
|      * 辅助方法, 转换Set<ConstraintViolation>为Map<property, message>. | 
|      */ | 
|     @SuppressWarnings("rawtypes") | 
|     public static Map<String, String> extractPropertyAndMessage(Set<? extends ConstraintViolation> constraintViolations) { | 
|         Map<String, String> errorMessages = Maps.newHashMap(); | 
|         for (ConstraintViolation violation : constraintViolations) { | 
|             errorMessages.put(violation.getPropertyPath().toString(), violation.getMessage()); | 
|         } | 
|         return errorMessages; | 
|     } | 
|   | 
|     /** | 
|      * 辅助方法, 转换ConstraintViolationException中的Set<ConstraintViolations>为List<propertyPath message>. | 
|      */ | 
|     public static List<String> extractPropertyAndMessageAsList(ConstraintViolationException e) { | 
|         return extractPropertyAndMessageAsList(e.getConstraintViolations(), " "); | 
|     } | 
|   | 
|     /** | 
|      * 辅助方法, 转换Set<ConstraintViolations>为List<propertyPath message>. | 
|      */ | 
|     @SuppressWarnings("rawtypes") | 
|     public static List<String> extractPropertyAndMessageAsList(Set<? extends ConstraintViolation> constraintViolations) { | 
|         return extractPropertyAndMessageAsList(constraintViolations, " "); | 
|     } | 
|   | 
|     /** | 
|      * 辅助方法, 转换ConstraintViolationException中的Set<ConstraintViolations>为List<propertyPath +separator+ message>. | 
|      */ | 
|     public static List<String> extractPropertyAndMessageAsList(ConstraintViolationException e, String separator) { | 
|         return extractPropertyAndMessageAsList(e.getConstraintViolations(), separator); | 
|     } | 
|   | 
|     /** | 
|      * 辅助方法, 转换Set<ConstraintViolation>为List<propertyPath +separator+ message>. | 
|      */ | 
|     @SuppressWarnings("rawtypes") | 
|     public static List<String> extractPropertyAndMessageAsList(Set<? extends ConstraintViolation> constraintViolations, | 
|                                                                String separator) { | 
|         List<String> errorMessages = Lists.newArrayList(); | 
|         for (ConstraintViolation violation : constraintViolations) { | 
|             errorMessages.add(violation.getPropertyPath() + separator + violation.getMessage()); | 
|         } | 
|         return errorMessages; | 
|     } | 
|   | 
| } |