Skip to content

Commit d53a4c0

Browse files
committed
✨ 添加集合类型校验
1 parent 3bdacaa commit d53a4c0

File tree

3 files changed

+100
-4
lines changed

3 files changed

+100
-4
lines changed

summer-validator/src/main/java/com/dianpoint/summer/validator/validator/collection/CollectionValidator.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,37 @@ public interface CollectionValidator<E, C extends Collection<E>> extends Validat
4141
*/
4242
CollectionValidator<E, C> elementValidator(Validator<E> validator);
4343

44+
//为集合类型增加addRule 避免使用时访问的是接口validator
45+
46+
47+
/**
48+
* 为集合添加校验规则
49+
*
50+
* @param rule 校验规则
51+
* @return 当前校验器实例 支持链式调用
52+
*/
53+
@Override
54+
CollectionValidator<E, C> addRule(ValidationRule<C> rule);
55+
56+
/**
57+
* 为集合添加基于predicate的校验规则
58+
*
59+
* @param condition 集合
60+
* @param errorMessage 校验失败时的错误信息
61+
* @return 当前校验器实例,支持链式调用
62+
*/
63+
@Override
64+
CollectionValidator<E, C> addRule(Predicate<C> condition, String errorMessage);
65+
66+
67+
/**
68+
* 为集合添加基于predicate的校验规则
69+
*
70+
* @param condition 集合
71+
* @param errorMessage 校验失败时的错误信息
72+
* @param fieldName 字段名
73+
* @return 当前校验器失败,支持链式调用
74+
*/
75+
@Override
76+
CollectionValidator<E, C> addRule(Predicate<C> condition, String errorMessage, String fieldName);
4477
}

summer-validator/src/main/java/com/dianpoint/summer/validator/validator/collection/DefaultCollectionValidator.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,24 @@ public DefaultCollectionValidator(Class<C> collectionType, Class<E> elementType)
2727
}
2828

2929

30+
@Override
31+
public CollectionValidator<E, C> addRule(ValidationRule<C> rule) {
32+
super.addRule(rule);
33+
return this;
34+
}
35+
36+
@Override
37+
public CollectionValidator<E, C> addRule(Predicate<C> condition, String errorMessage) {
38+
super.addRule(condition, errorMessage);
39+
return this;
40+
}
41+
42+
@Override
43+
public CollectionValidator<E, C> addRule(Predicate<C> condition, String errorMessage, String fieldName) {
44+
super.addRule(condition, errorMessage, fieldName);
45+
return this;
46+
}
47+
3048
@Override
3149
public CollectionValidator<E, C> elementRule(ValidationRule<E> rule) {
3250
if (elementValidator == null) {
@@ -65,7 +83,7 @@ public List<ValidationResult> validate(C collection) {
6583
for (ValidationResult elementResult : elementResults) {
6684
if (elementResult.isFailure()) {
6785
results.add(ValidationResult.failure(String.format("元素[%s]:%s collection[%s]", index
68-
, elementResult.getErrorMessage(), index)));
86+
, elementResult.getErrorMessage(), index), "collection"));
6987
}
7088
}
7189
index++;

summer-validator/src/test/java/com/dianpoint/summer/validator/test/ValidatorDemo.java

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@
55
import com.dianpoint.summer.validator.ValidationRules;
66
import com.dianpoint.summer.validator.Validators;
77
import com.dianpoint.summer.validator.test.cases.User;
8+
import com.dianpoint.summer.validator.validator.Validator;
89

910
import java.util.Arrays;
1011
import java.util.List;
12+
import java.util.Objects;
13+
import java.util.function.Predicate;
1114

1215
/**
1316
* @author: congccoder
@@ -25,7 +28,11 @@ public static void main(String[] args) {
2528

2629
// validateObject();
2730

28-
validateCollectionString();
31+
// validateCollectionString();
32+
33+
// validateCollectionObjects();
34+
35+
validateAnnotation();
2936
}
3037

3138
static void validateEmail(String email) {
@@ -60,20 +67,58 @@ static void validateObject() {
6067
static void validateCollectionString() {
6168
List<String> strList = Arrays.asList("张三", "李四", "", null, "王五", "小王");
6269
List<ValidationResult> validationResults = Validators.collection(List.class, String.class)
63-
.elementRule(str -> str != null, "元素不等为null")
64-
.elementRule(str -> str.isEmpty(), "元素不能为空字符串")
6570
.addRule(ValidationRules.minsize(1))
6671
.addRule(ValidationRules.maxSize(10))
6772
.addRule(ValidationRules.range(3, 5))
73+
.elementRule(notNull(), "元素不等为null")
74+
.elementRule(notEmpty(), "元素不能为空字符串")
6875
.validate(strList);
6976

7077
printResults(validationResults);
7178
}
7279

80+
static void validateCollectionObjects() {
81+
List<User> users = Arrays.asList(
82+
new User("张三", "123@mail.com"),
83+
new User("", "1234@gmail.com"),
84+
new User(null, ""),
85+
null
86+
);
87+
88+
Validator<User> userValidators = Validators.<User>generic()
89+
.addRule(user -> user.getUsername() != null && !user.getUsername().isEmpty(),
90+
"用户名不能为空")
91+
.addRule(user -> user.getEmail() != null && user.getEmail().contains("@"), "邮箱格式不正确");
92+
93+
List<ValidationResult> validationResults = Validators.collection(List.class, User.class).elementValidator(userValidators).validate(users);
94+
printResults(validationResults);
95+
}
96+
97+
static void validateAnnotation() {
98+
User user = new User(null, "123@mail.com");
99+
List<ValidationResult> validationResults = Validators.annotated(User.class).validate(user);
100+
printResults(validationResults);
101+
}
102+
73103

74104
static void printResults(List<ValidationResult> validateResult) {
75105
for (ValidationResult result : validateResult) {
76106
System.out.println(result.getFieldName() + "校验结果:" + result.getErrorMessage());
77107
}
78108
}
109+
110+
111+
//辅助断言工具
112+
113+
static Predicate<String> notEmpty() {
114+
return str -> !str.isEmpty();
115+
}
116+
117+
static Predicate<String> notNull() {
118+
return Objects::nonNull;
119+
}
120+
121+
static Predicate<String> notBlank() {
122+
return notEmpty().and(notNull());
123+
}
79124
}

0 commit comments

Comments
 (0)