Je veux valider l'e-mail lorsque l'utilisateur souhaite s'inscrire sur mon site Web. J'ai défini des annotations @NotBlank et @Email, fait une annotation @Valid à la méthode post, mais je ne sais pas comment le faire fonctionner correctement. À /register, l'application de point de terminaison affiche error500. Comment puis-je modifier mon code pour qu'il fonctionne ? Le nom d'utilisateur ne doit pas s'inscrire avec un e-mail vide ou incorrect, mais je ne peux pas le résoudre.

Classe AppUser :

@Data
@Entity
public class AppUser implements UserDetails {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(unique = true)
    @NotBlank(message = "login is required")
    private String username;
    @NotBlank(message = "password is required")
    private String password;
    private String role;
    @Column(unique = true)
    @Email(message = "Wrong e-mail")
    private String email;
    private String phone;

    public AppUser() {
    }

Classe UserController:

@Controller
public class UserController {


    @GetMapping("register")
    public String register(Model model) {
        model.addAttribute("user", new AppUser());
        return "register";
    }

    @PostMapping("/registerOk")
    public String registerOk(@Valid AppUser appUser, Errors errors) {
        if (errors.hasErrors()) {
            return "register";
        }
        userService.addUser(appUser);
        return "redirect:register?success";
    }
}

Mon registre.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org"
      xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
<head>
    <meta charset="UTF-8">
    <title>Rejestracja</title>
    <link rel="stylesheet" type="text/css" th:href="@{/css/index.css}"/>
</head>
<body>

<form class="box" th:action="@{/registerOk}" method="post">
    <div th:if="${param.success}">
        <div class="alert alert-info"><span style="color: white">Register is sucessful, check your e-mail adress.</span></div>
    </div>
    <h1>Register new account: </h1>
    <input type="text" name="username" placeholder="login">
<span class="validationError"
            th:if="${#fields.hasErrors('username')}"
            th:errors="*{username}">Username Error</span>
    <input type="password" name="password" placeholder="password" id="hide">
    <input type="text" name="email" placeholder="E-Mail">
    <input type="text" name="phone" placeholder="phone number">
    <input type="submit" value="Register me!">
    <div class="form-group">
        <span style="color: white">Already registered? <a href="/" th:href="@{/login}">Login</a></span>
    </div>
</form>

</body>
</html>
-1
Cobra9 22 oct. 2020 à 20:56

1 réponse

Meilleure réponse

Utilisez type="email" au lieu de text.

<input type="email" name="email" placeholder="E-Mail">

Utilisez required si vous souhaitez que le champ de saisie soit obligatoire.

<input type="email" name="email" placeholder="E-Mail" required>
-1
Ted 22 oct. 2020 à 18:04