Skip to content

Commit 628b3e2

Browse files
committed
update README.md
1 parent 71a6465 commit 628b3e2

File tree

6 files changed

+125
-3
lines changed

6 files changed

+125
-3
lines changed

boot-validation/README.md

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,4 +189,50 @@ public class User {
189189
@NotNull
190190
private Action action;
191191
}
192-
```
192+
```
193+
194+
#### 自定义校验
195+
196+
在业务中还会有一些特殊场景, 需要对某些字段增加自定义的校验逻辑, 比如想校验地址是否以`中国`开头, 这时候需要自定义注解, 并且实现`ConstraintValidator`接口自定义校验逻辑
197+
198+
```java
199+
@Documented
200+
@Constraint(validatedBy = StartWithValidator.class)
201+
@Target({METHOD, FIELD})
202+
@Retention(RUNTIME)
203+
public @interface StartWithValidation {
204+
205+
String message() default "不符合要求的初始值";
206+
207+
String start() default "";
208+
209+
Class<?>[] groups() default {};
210+
211+
Class<? extends Payload>[] payload() default {};
212+
213+
}
214+
215+
public class StartWithValidator implements ConstraintValidator<StartWithValidation, String> {
216+
217+
private String start;
218+
219+
@Override
220+
public void initialize(StartWithValidation constraintAnnotation) {
221+
start = constraintAnnotation.start();
222+
}
223+
224+
@Override
225+
public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
226+
if (!StringUtils.isEmpty(s)) {
227+
return s.startsWith(start);
228+
}
229+
return false;
230+
}
231+
}
232+
```
233+
234+
这时候只需要在需要验证的字段上加上我们自定义的`@StartWithValidation`即可
235+
236+
### 总结
237+
238+
本篇文章到此over, 代码
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package org.boot.config.annotation;
2+
3+
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
4+
import static java.lang.annotation.ElementType.CONSTRUCTOR;
5+
import static java.lang.annotation.ElementType.FIELD;
6+
import static java.lang.annotation.ElementType.METHOD;
7+
import static java.lang.annotation.ElementType.PARAMETER;
8+
import static java.lang.annotation.RetentionPolicy.RUNTIME;
9+
10+
import java.lang.annotation.Documented;
11+
import java.lang.annotation.Retention;
12+
import java.lang.annotation.Target;
13+
import javax.validation.Constraint;
14+
import javax.validation.Payload;
15+
import org.boot.config.valid.StartWithValidator;
16+
17+
/**
18+
* @author fantasy
19+
* @date 2020/7/31
20+
*/
21+
@Documented
22+
@Constraint(validatedBy = StartWithValidator.class)
23+
@Target({METHOD, FIELD})
24+
@Retention(RUNTIME)
25+
public @interface StartWithValidation {
26+
27+
String message() default "不符合要求的初始值";
28+
29+
String start() default "";
30+
31+
Class<?>[] groups() default {};
32+
33+
Class<? extends Payload>[] payload() default {};
34+
35+
}

boot-validation/src/main/java/org/boot/config/valid/QueryAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.boot.config.valid;
22

33
/**
4-
* @author luoliang
4+
* @author fantasy
55
* @date 2020/7/30
66
*/
77
public interface QueryAction {
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.boot.config.valid;
2+
3+
import javax.validation.ConstraintValidator;
4+
import javax.validation.ConstraintValidatorContext;
5+
import org.boot.config.annotation.StartWithValidation;
6+
import org.springframework.util.StringUtils;
7+
8+
/**
9+
* @author fantasy
10+
* @date 2020/7/31
11+
*/
12+
public class StartWithValidator implements ConstraintValidator<StartWithValidation, String> {
13+
14+
private String start;
15+
16+
@Override
17+
public void initialize(StartWithValidation constraintAnnotation) {
18+
start = constraintAnnotation.start();
19+
}
20+
21+
@Override
22+
public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
23+
if (!StringUtils.isEmpty(s)) {
24+
return s.startsWith(start);
25+
}
26+
return false;
27+
}
28+
}

boot-validation/src/main/java/org/boot/config/valid/UpdateAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.boot.config.valid;
22

33
/**
4-
* @author luoliang
4+
* @author fantasy
55
* @date 2020/7/30
66
*/
77
public interface UpdateAction {

boot-validation/src/main/java/org/boot/domain/User.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import javax.validation.constraints.Min;
44
import javax.validation.constraints.NotBlank;
55
import javax.validation.constraints.NotNull;
6+
import org.boot.config.annotation.StartWithValidation;
67
import org.boot.config.valid.QueryAction;
78
import org.boot.config.valid.UpdateAction;
89

@@ -21,6 +22,9 @@ public class User {
2122
@Min(value = 1, message = "请输入合法年龄", groups = UpdateAction.class)
2223
private Integer age;
2324

25+
@StartWithValidation(start = "中国", groups = UpdateAction.class)
26+
private String address;
27+
2428
public Long getId() {
2529
return id;
2630
}
@@ -45,12 +49,21 @@ public void setAge(Integer age) {
4549
this.age = age;
4650
}
4751

52+
public String getAddress() {
53+
return address;
54+
}
55+
56+
public void setAddress(String address) {
57+
this.address = address;
58+
}
59+
4860
@Override
4961
public String toString() {
5062
return "User{" +
5163
"id=" + id +
5264
", name='" + name + '\'' +
5365
", age=" + age +
66+
", address='" + address + '\'' +
5467
'}';
5568
}
5669
}

0 commit comments

Comments
 (0)