model class: Alumni.java: Here I used @Email annotation. But when I write the email on the form it only show error messege if I don't put '@'. but If I don't use .com or .edu it does not show any error messege.
@Entity
@Table(name="alumnies",uniqueConstraints = @UniqueConstraint(columnNames = "email") )
public class Alumni {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Email
private String email;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
html file: This is the email section of the html file.
<div class="form-group"
th:classappend="${#fields.hasErrors('email')}? 'has-error':''">
<label for="email" class="control-label">Email</label> <input
id="email" class="form-control" th:field="*{email}" />
<p class="error-message"
th:each="error : ${#fields.errors('email')}" th:text="${error}">Validation
error</p>
</div>
Controller class:
@Controller
public class RegistraionController {
@Autowired
private UserService us;
@GetMapping("/")
public String showRegistration(Model model) {
Alumni alumni = new Alumni();
model.addAttribute("alumni", alumni);
return "registration";
}
@PostMapping("/registration")
public String saveAlumni(@ModelAttribute("alumni") @Validated Alumni alumni, BindingResult bindingResult) {
Alumni existing = us.findByEmail(alumni.getEmail());
if (existing != null) {
bindingResult.rejectValue("email", null, "There is already an account registered with that email");
}
if (bindingResult.hasErrors()) {
return "registration";
}
us.saveAlumni(alumni);
return "redirect:/";
}
}