Почему контроллер сохраняет пользователя с пустыми полями свойств - PullRequest
1 голос
/ 01 марта 2020

Обычно Spring вылетает с этой ошибкой " value [null]; коды [NotNull.user.email, NotNull.email, NotNull. java .lang.String, NotNull]; аргументы [org.springframework. context.support.DefaultMessageSourceResolvable: codes [user.email, email]; аргументы []; сообщение по умолчанию [email]]; сообщение по умолчанию [не должно быть нулевым], Ошибка поля в объекте 'user' в поле 'firstName': отклоненное значение [null]; коды"каждый раз, когда я пытаюсь отправить заполненную форму профиля. Поэтому, естественно, я посмотрел, какие данные были сохранены после нажатия кнопки «Отправить» в форме. Оказывается, что сохраненный объект User имел все представленное свойство из формы как нулевое. Я проверил внутри контроллера, что было передано внутрь, все представленные свойства из формы были нулевыми. Почему это происходит?

Пользователь. java

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @NotNull
    @Size(min = 2, max = 80)
    private String firstName;

    @NotNull
    @Size(min= 2, max = 80)
    private String lastName;

    @NotNull
    @Email
    private String email;

    private Boolean enabled = false;

    private String password = "";

    private String role = "AUTHOR";


    private String location = "";


    private String topics = "";


    private String job = "";


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Boolean getEnabled() {
        return enabled;
    }

    public void setEnabled(Boolean enabled) {
        this.enabled = enabled;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    public String getTopics() {
        return topics;
    }

    public void setTopics(String topics) {
        this.topics = topics;
    }

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }
}

completeProfile. html

<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>Complete your profile</p>
<form action="#" th:action="@{/completed-profile}" th:object="${user}" method="post">
    <p>Email: <p th:text="${user.email}"></p>

    <table>
        <tr>
            <td>Location:</td>
            <td><input type="text" th:field="*{location}" /></td>
            <td th:if="${#fields.hasErrors('location')}" th:errors="*{location}"></td>

        </tr>
        <tr>
            <td>Job</td>
            <td><input type="text" th:field="*{job}" /></td>
            <td th:if="${#fields.hasErrors('job')}" th:errors="*{job}"></td>

        </tr>

        <tr>
            <td>Topics of interest</td>
            <td><input type="text" th:field="*{topics}" /></td>
            <td th:if="${#fields.hasErrors('topics')}" th:errors="*{topics}"></td>

        </tr>

        <tr>
            <td>Password</td>
            <td><input type="password" th:field="*{password}" /></td>
            <td th:if="${#fields.hasErrors('password')}" th:errors="*{password}"></td>
            <td th:text="${password_error}"></td>
        </tr>


        <tr>
            <td><button type="submit">Submit</button></td>
        </tr>
    </table>


</form>

</body>
</html>

ProfileController. java

@Controller
public class ProfileController {

    UserRepository userRepository;


    public ProfileController(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @RequestMapping(value = {"/profile", "/profile.html"}, method = RequestMethod.GET)
    public String profileForm(){
        return "auth/profile";
    }

    @RequestMapping(value = "/complete-profile", method = RequestMethod.GET)
    public String completeProfileForm(){
        return "auth/completeProfile";
    }

    @RequestMapping(value = "/completed-profile", method = RequestMethod.POST)
    public String submitProfileForm(@Valid User user, BindingResult bindingResult, Model model){


        System.err.println(user.getEmail());
        if (user.getPassword() == null || user.getPassword().equals("")){
           // model.addAttribute("password_error", "password cannot be null");
            model.addAttribute("user", user);
            return "auth/completeProfile";

        }


        if(bindingResult.hasErrors()){
            System.out.println(bindingResult.getAllErrors());
            return "auth/completeProfile";
        }

        userRepository.save(user);

        return "auth/login";

    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...