1

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:/";
    }
    

}
travel
  • 65
  • 4
  • You can provide an _additional_ regexp like this: `@Email(regexp="your_regex_here")`. The default regexp will still be applied, and is deliberately limited in scope (but still non-trivial - see JavaDoc [here](https://docs.jboss.org/hibernate/stable/validator/api/org/hibernate/validator/internal/constraintvalidators/AbstractEmailValidator.html) and code [here](https://github.com/hibernate/hibernate-validator/blob/ecbba181d31c3a62f5210b1f2f8420a864b49672/engine/src/main/java/org/hibernate/validator/internal/constraintvalidators/AbstractEmailValidator.java#L37)). – andrewJames Oct 02 '20 at 23:28
  • Also, have a read of the discussions here [Hibernate validator: @Email accepts ask@stackoverflow as valid?](https://stackoverflow.com/questions/4459474/hibernate-validator-email-accepts-askstackoverflow-as-valid). Note the warnings mentioned in that discussion. It is not difficult to write a regexp which will make things worse. – andrewJames Oct 02 '20 at 23:30

0 Answers0