Skip to content

Commit 064dbb7

Browse files
committed
Add lesson 12
1 parent c1eea6d commit 064dbb7

File tree

15 files changed

+346
-0
lines changed

15 files changed

+346
-0
lines changed
Binary file not shown.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
target/
2+
!.mvn/wrapper/maven-wrapper.jar
3+
4+
### STS ###
5+
.apt_generated
6+
.classpath
7+
.factorypath
8+
.project
9+
.settings
10+
.springBeans
11+
12+
### IntelliJ IDEA ###
13+
.idea
14+
*.iws
15+
*.iml
16+
*.ipr
17+
18+
### NetBeans ###
19+
nbproject/private/
20+
build/
21+
nbbuild/
22+
dist/
23+
nbdist/
24+
.nb-gradle/
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
6+
<groupId>com.segmentfault</groupId>
7+
<artifactId>spring-boot-lesson-12</artifactId>
8+
<version>0.0.1-SNAPSHOT</version>
9+
<packaging>jar</packaging>
10+
11+
<name>spring-boot-lesson-12</name>
12+
<description>Demo project for Spring Boot</description>
13+
14+
<parent>
15+
<groupId>org.springframework.boot</groupId>
16+
<artifactId>spring-boot-starter-parent</artifactId>
17+
<version>1.5.6.RELEASE</version>
18+
<relativePath/> <!-- lookup parent from repository -->
19+
</parent>
20+
21+
<properties>
22+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
23+
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
24+
<java.version>1.8</java.version>
25+
</properties>
26+
27+
<dependencies>
28+
29+
<!-- Apache Commons Validator -->
30+
<dependency>
31+
<groupId>commons-validator</groupId>
32+
<artifactId>commons-validator</artifactId>
33+
<version>1.6</version>
34+
</dependency>
35+
36+
<dependency>
37+
<groupId>org.springframework.boot</groupId>
38+
<artifactId>spring-boot-starter-actuator</artifactId>
39+
</dependency>
40+
<dependency>
41+
<groupId>org.springframework.boot</groupId>
42+
<artifactId>spring-boot-starter-validation</artifactId>
43+
</dependency>
44+
<dependency>
45+
<groupId>org.springframework.boot</groupId>
46+
<artifactId>spring-boot-starter-web</artifactId>
47+
</dependency>
48+
49+
<dependency>
50+
<groupId>org.springframework.boot</groupId>
51+
<artifactId>spring-boot-starter-test</artifactId>
52+
<scope>test</scope>
53+
</dependency>
54+
</dependencies>
55+
56+
<build>
57+
<plugins>
58+
<plugin>
59+
<groupId>org.springframework.boot</groupId>
60+
<artifactId>spring-boot-maven-plugin</artifactId>
61+
</plugin>
62+
</plugins>
63+
</build>
64+
65+
66+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.segmentfault.bean.validation;
2+
3+
import com.segmentfault.bean.validation.constraints.PersonNamePrefix;
4+
import org.springframework.util.StringUtils;
5+
6+
import javax.validation.ConstraintValidator;
7+
import javax.validation.ConstraintValidatorContext;
8+
9+
/**
10+
* {@link PersonNamePrefix} {@link ConstraintValidator}
11+
*
12+
* @author <a href="mailto:mercyblitz@gmail.com">Mercy</a>
13+
* @see PersonNamePrefix
14+
* @see ConstraintValidator
15+
* @since 2017.08.12
16+
*/
17+
public class PersonNamePrefixConstraintValidator implements ConstraintValidator<PersonNamePrefix, String> {
18+
19+
private String prefix;
20+
21+
@Override
22+
public void initialize(PersonNamePrefix constraintAnnotation) {
23+
this.prefix = constraintAnnotation.prefix();
24+
}
25+
26+
@Override
27+
public boolean isValid(String name, ConstraintValidatorContext context) {
28+
29+
if (!name.startsWith(prefix)) {
30+
31+
context.disableDefaultConstraintViolation();
32+
33+
ConstraintValidatorContext.ConstraintViolationBuilder builder =
34+
context.buildConstraintViolationWithTemplate("人的名称必须以\"" + prefix + "\"起始!");
35+
builder.addConstraintViolation();
36+
37+
return false;
38+
}
39+
40+
return true;
41+
}
42+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.segmentfault.bean.validation.constraints;
2+
3+
import com.segmentfault.bean.validation.PersonNamePrefixConstraintValidator;
4+
5+
import javax.validation.Constraint;
6+
import javax.validation.Payload;
7+
import java.lang.annotation.Documented;
8+
import java.lang.annotation.Retention;
9+
import java.lang.annotation.Target;
10+
11+
import static java.lang.annotation.ElementType.FIELD;
12+
import static java.lang.annotation.ElementType.METHOD;
13+
import static java.lang.annotation.RetentionPolicy.RUNTIME;
14+
15+
/**
16+
* 人的名称校验
17+
*
18+
* @author <a href="mailto:mercyblitz@gmail.com">Mercy</a>
19+
* @see
20+
* @since 2017.08.12
21+
*/
22+
@Target({METHOD, FIELD})
23+
@Retention(RUNTIME)
24+
@Documented
25+
@Constraint(validatedBy = {PersonNamePrefixConstraintValidator.class})
26+
public @interface PersonNamePrefix {
27+
28+
String message() default "{person.name.prefix.message}";
29+
30+
Class<?>[] groups() default {};
31+
32+
Class<? extends Payload>[] payload() default {};
33+
34+
String prefix() default "sf-";
35+
36+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.segmentfault.controller;
2+
3+
import com.segmentfault.domain.Person;
4+
import org.springframework.web.bind.annotation.PostMapping;
5+
import org.springframework.web.bind.annotation.RequestBody;
6+
import org.springframework.web.bind.annotation.RestController;
7+
8+
import javax.validation.Valid;
9+
10+
/**
11+
* {@link Person} Controller
12+
*
13+
* @author <a href="mailto:mercyblitz@gmail.com">Mercy</a>
14+
* @see
15+
* @since 2017.08.12
16+
*/
17+
@RestController
18+
public class PersonController {
19+
20+
21+
@PostMapping("/person/save")
22+
public Person save(@Valid @RequestBody Person person) {
23+
24+
return person;
25+
26+
}
27+
28+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.segmentfault.domain;
2+
3+
import com.segmentfault.bean.validation.constraints.PersonNamePrefix;
4+
5+
import javax.validation.Valid;
6+
import javax.validation.constraints.Max;
7+
import javax.validation.constraints.Min;
8+
import javax.validation.constraints.NotNull;
9+
10+
/**
11+
* 人 领域对象
12+
*
13+
* @author <a href="mailto:mercyblitz@gmail.com">Mercy</a>
14+
* @see
15+
* @since 2017.08.12
16+
*/
17+
public class Person {
18+
19+
@NotNull
20+
@PersonNamePrefix(prefix = "segmentfault-")
21+
private String name;
22+
23+
@Min(value = 0)
24+
@Max(value = 200
25+
, message = "{person.age.max.message}"
26+
)
27+
private int age;
28+
29+
public String getName() {
30+
return name;
31+
}
32+
33+
public void setName(String name) {
34+
this.name = name;
35+
}
36+
37+
public int getAge() {
38+
return age;
39+
}
40+
41+
public void setAge(int age) {
42+
this.age = age;
43+
}
44+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.segmentfault.spring.validator;
2+
3+
import com.segmentfault.domain.Person;
4+
import org.springframework.util.StringUtils;
5+
import org.springframework.validation.Errors;
6+
import org.springframework.validation.Validator;
7+
8+
/**
9+
* {@link Person} {@link Validator}
10+
*
11+
* @author <a href="mailto:mercyblitz@gmail.com">Mercy</a>
12+
* @see Person
13+
* @see Validator
14+
* @since 2017.08.12
15+
*/
16+
public class PersonValidator implements Validator {
17+
18+
19+
@Override
20+
public boolean supports(Class<?> clazz) {
21+
return Person.class.isAssignableFrom(clazz);
22+
}
23+
24+
@Override
25+
public void validate(Object target, Errors errors) {
26+
27+
Person person = Person.class.cast(target);
28+
29+
String name = person.getName(); //名字需要校验
30+
31+
if (!StringUtils.hasLength(name)) {
32+
33+
errors.reject("person.name.not.null", "人的名字不能为空");
34+
35+
}
36+
37+
}
38+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.segmentfault.springbootlesson12;
2+
3+
import org.apache.commons.validator.routines.IntegerValidator;
4+
5+
import java.util.Locale;
6+
7+
/**
8+
* Apache commons-validator Main
9+
*
10+
* @author <a href="mailto:mercyblitz@gmail.com">Mercy</a>
11+
* @see
12+
* @since 2017.08.12
13+
*/
14+
public class ApacheCommonsValidatorMain {
15+
16+
17+
public static void main(String[] args) {
18+
19+
IntegerValidator validator = IntegerValidator.getInstance();
20+
21+
Integer value = validator.validate("10");
22+
23+
System.out.println(value);
24+
25+
value = validator.validate("A");
26+
27+
System.out.println(value);
28+
29+
System.out.println(validator.format(100000, Locale.ENGLISH));
30+
31+
}
32+
33+
}

0 commit comments

Comments
 (0)