Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit ba4b51a

Browse files
UniqueEmail validator
1 parent be77cc1 commit ba4b51a

File tree

5 files changed

+68
-5
lines changed

5 files changed

+68
-5
lines changed

‎src/main/java/com/naturalprogrammer/spring5tutorial/commands/UserCommand.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,14 @@
22

33
import javax.validation.constraints.Size;
44

5-
import org.hibernate.validator.constraints.Email;
65
import org.hibernate.validator.constraints.NotBlank;
76

87
import com.naturalprogrammer.spring5tutorial.domain.User;
8+
import com.naturalprogrammer.spring5tutorial.validation.UniqueEmail;
99

1010
public class UserCommand {
1111

12-
@NotBlank(message="{blankEmail}")
13-
@Email
14-
@Size(min=4, max=250, message="{emailSizeError}")
12+
@UniqueEmail
1513
private String email;
1614

1715
@NotBlank

‎src/main/java/com/naturalprogrammer/spring5tutorial/domain/User.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,13 @@
1111
import javax.persistence.FetchType;
1212
import javax.persistence.GeneratedValue;
1313
import javax.persistence.Id;
14+
import javax.persistence.Index;
1415
import javax.persistence.Table;
1516

1617
@Entity
17-
@Table(name="usr")
18+
@Table(name="usr", indexes = {
19+
@Index(columnList = "email", unique=true)
20+
})
1821
public class User {
1922

2023
public static enum Role {
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.naturalprogrammer.spring5tutorial.validation;
2+
3+
import static java.lang.annotation.ElementType.FIELD;
4+
import static java.lang.annotation.RetentionPolicy.RUNTIME;
5+
6+
import java.lang.annotation.Documented;
7+
import java.lang.annotation.Retention;
8+
import java.lang.annotation.Target;
9+
10+
import javax.validation.Constraint;
11+
import javax.validation.constraints.Size;
12+
13+
import org.hibernate.validator.constraints.Email;
14+
import org.hibernate.validator.constraints.NotBlank;
15+
16+
@Constraint(validatedBy=UniqueEmailValidator.class)
17+
@NotBlank(message="{blankEmail}")
18+
@Email
19+
@Size(min=4, max=250, message="{emailSizeError}")
20+
@Documented
21+
@Retention(RUNTIME)
22+
@Target(FIELD)
23+
public @interface UniqueEmail {
24+
25+
String message() default "{duplicateEmail}";
26+
27+
Class[] groups() default {};
28+
29+
Class[] payload() default {};
30+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.naturalprogrammer.spring5tutorial.validation;
2+
3+
import javax.validation.ConstraintValidator;
4+
import javax.validation.ConstraintValidatorContext;
5+
6+
import org.springframework.stereotype.Component;
7+
8+
import com.naturalprogrammer.spring5tutorial.repositories.UserRepository;
9+
10+
@Component
11+
public class UniqueEmailValidator
12+
implements ConstraintValidator<UniqueEmail, String> {
13+
14+
private UserRepository userRepository;
15+
16+
public UniqueEmailValidator(UserRepository userRepository) {
17+
this.userRepository = userRepository;
18+
}
19+
20+
@Override
21+
public void initialize(UniqueEmail arg0) {
22+
// TODO Auto-generated method stub
23+
24+
}
25+
26+
@Override
27+
public boolean isValid(String email, ConstraintValidatorContext arg1) {
28+
29+
return !userRepository.findByEmail(email).isPresent();
30+
}
31+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
blankEmail: Please provide your email address!
22
emailSizeError: Email size should be between {min} and {max} chars
3+
duplicateEmail: Email should be unique

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /