Helius
2022-05-24 560228ac3c15cccce0b2a5994d44e4e81b5b3b73
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/**
 * projectName: common
 * fileName: ParameterValidateFailNoFast.java
 * packageName: com.hydee.common.validate
 * date: 2021-04-22 9:25 上午
 * copyright(c) 2021 http://www.hydee.cn/ Inc. All rights reserved.
 */
package com.matrix.system.common.validate;
 
import com.matrix.system.common.validate.beans.ErrorMessage;
import com.matrix.system.common.validate.group.Group;
import org.hibernate.validator.HibernateValidator;
 
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
 
/**
 * @version: V1.0
 * @author: LiHengye
 * @className: ParameterValidateFailNoFast
 * @packageName: com.hydee.common.validate
 * @description: 参数校验遇到错误非立刻返回
 * @data: 2021-04-22 9:25 上午
 **/
public class ParameterValidateFailNoFast {
 
    /**
     * 开启快速结束模式 failFast (true)
     */
    private static Validator validator = Validation.byProvider(HibernateValidator.class).configure().failFast(false).buildValidatorFactory().getValidator();
    /**
     * 校验对象
     * @param t bean
     * @param groups 校验组
     * @return ValidResult
     */
    public static <T> ValidResult validateBean(T t, Class<?>...groups) {
        ValidResult result = new ValidResult();
        Set<ConstraintViolation<T>> violationSet = validator.validate(t,groups);
        boolean hasError = violationSet != null && violationSet.size() > 0;
        result.setHasErrors(hasError);
        if (hasError) {
            for (ConstraintViolation<T> violation : violationSet) {
                result.addError(violation.getPropertyPath().toString(), violation.getMessageTemplate());
            }
        }
        return result;
    }
 
    /**
     * 校验bean的某一个属性
     * @param obj          bean
     * @param propertyName 属性名称
     * @return ValidResult
     */
    public static <T> ValidResult validateProperty(T obj, String propertyName) {
        ValidResult result = new ValidResult();
        Set<ConstraintViolation<T>> violationSet = validator.validateProperty(obj, propertyName, Group.ADD.class);
        boolean hasError = violationSet != null && violationSet.size() > 0;
        result.setHasErrors(hasError);
        if (hasError) {
            for (ConstraintViolation<T> violation : violationSet) {
                result.addError(propertyName, violation.getMessage());
            }
        }
        return result;
    }
 
    /**
     * 校验结果类
     */
    public static class ValidResult {
 
        /**
         * 是否有错误
         */
        private boolean hasErrors;
 
        /**
         * 错误信息
         */
        private List<ErrorMessage> errors;
 
        public ValidResult() {
            this.errors = new ArrayList<>();
        }
        public boolean hasErrors() {
            return hasErrors;
        }
 
        public void setHasErrors(boolean hasErrors) {
            this.hasErrors = hasErrors;
        }
 
        /**
         * 获取所有验证信息
         * @return 集合形式
         */
        public List<ErrorMessage> getAllErrors() {
            return errors;
        }
        /**
         * 获取所有验证信息
         * @return 字符串形式
         */
        public String getErrors(){
            StringBuilder sb = new StringBuilder();
            for (ErrorMessage error : errors) {
                sb.append(error.getPropertyPath()).append(":").append(error.getMessage()).append(" /");
            }
            return sb.toString();
        }
 
        public String getAllErrorMessage(){
            StringBuilder sb = new StringBuilder();
            for (ErrorMessage error : errors) {
                if(error.getMessage() == null || error.getMessage().isEmpty()){
                    sb.append(error.getPropertyPath()).append(":不合法!");
                }else{
                    sb.append(error.getPropertyPath()).append(":").append(error.getMessage()).append(" ");
                }
            }
            return sb.toString();
        }
 
        public void addError(String propertyPath, String message) {
            this.errors.add(new ErrorMessage(propertyPath, message));
        }
    }
}