Исключение проверки Springboot: исключение org.springframework.validation.BeanPropertyBindingResult - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь показать ошибки проверки в моей форме, но я не могу ее реализовать. Я пытаюсь передать нулевые значения, я получаю сообщение проверки гибернации, но не вижу проверки формы?

Вот мой код:

@RequestMapping(value = "/register", method = RequestMethod.POST)
    public String saveForm(@Valid Users users,Model model,Errors errors) {
        if(errors.hasErrors()) {
            return "registerPage";
        }
        else {
            model.addAttribute("message","Registered................");
        System.out.println("Save Users TEST------------------------------------>");
        userRepository.save(users);

        return "register-success";
        }


    }

Вот исключение:

Ошибка поля в объекте «пользователи» в поле «зарплата»: отклоненное значение [ноль]; коды [NotNull.users.salary, NotNull.salary, NotNull.java.lang.Integer, NotNull]; аргументы [Org.springframework.context.support.DefaultMessageSourceResolvable: коды [users.salary, salary]; аргументы []; сообщение по умолчанию [зарплата]]; сообщение по умолчанию [не должно быть пустым] Ошибка поля в объекте 'users' в поле 'dept': отклоненное значение []; коды [Size.users.dept, Size.dept, Size.java.lang.String, размер]; аргументы [Org.springframework.context.support.DefaultMessageSourceResolvable: коды [users.dept, dept]; аргументы []; сообщение по умолчанию [dept], 10,2]; сообщение по умолчанию [Длина должна быть от 2 до 10] Ошибка поля в объект 'users' в поле 'name': отклоненное значение []; коды [Size.users.name, Size.name, Size.java.lang.String, размер]; аргументы [Org.springframework.context.support.DefaultMessageSourceResolvable: коды [users.name, name]; аргументы []; сообщение по умолчанию [имя], 30,2]; сообщение по умолчанию [Длина должна быть от 2 до 30]]

Вот мой пользователь Pojo:

public class Users implements Serializable{

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="id")
    private Integer id;
    @Column(name="name")
    @NotNull
    @Size(min=2,max=30,message="Length should be in between 2 to 30")
    private String name;

    @Column(name="salary")
    @NotNull
    private Integer salary;
    @Column(name="dept")
    @NotNull
    @Size(min=2,max=10,message="Length should be in between 2 to 10")
    private String dept;

    ....

    }

Вот моя HTML-форма (с использованием тимелина):

<h1 th:text="${message}" align="center"></h1>
<div class="container">
    <h2>Registration form</h2>
      <form class="form-horizontal" th:object="${registerCommand}" th:action="@{/rest/users/register}" method="post">
        <div class="form-group">
            <label for="name">Username:</label>
             <input type="text"
                class="form-control" id="name" placeholder="Enter Name"
                name="name" th:field="*{name}"> <br />
            <p th:if="${#fields.hasErrors('name')}" th:errors="*{name}" th:field="*{name}"
                class="alert alert-danger"></p>
        </div>
        <div class="form-group">
            <label for="dept">Department:</label>
             <input type="text"
                class="form-control" id="dept" placeholder="Enter Department"
                name="dept" th:field="*{dept}"> <br />
            <p th:if="${#fields.hasErrors('dept')}" th:errors="*{dept}" th:field="*{dept}"
                class="alert alert-danger"></p>
        </div>
        <div class="form-group">
            <label for="salary">Salary:</label> <input type="text"
                class="form-control" id="salary" placeholder="Enter salary"
                name="salary" th:field="*{salary}"> <br />
            <p th:if="${#fields.hasErrors('salary')}" th:errors="*{salary}" th:field="*{salary}"
                class="alert alert-danger"></p>
        </div>

        <button type="submit" class="btn btn-sucess">Submit</button>
    </form>
</div>

Ответы [ 3 ]

0 голосов
/ 16 ноября 2018

Проверьте, какие данные вы передаете в пользовательский объект при сохранении, возможно, значение зарплаты будет равно нулю. Поскольку вы использовали @valid для пользователей, он не будет принимать нулевое или пустое значение в данных запроса ввода

0 голосов
/ 20 ноября 2018

Нашел причину, я не передал правильные параметры в моем контроллере saveForm-

@RequestMapping(value = "/register", method = RequestMethod.POST)
    public String saveForm(@ModelAttribute("registerCommand") @Valid Users users, BindingResult bindingResult, Model model){

        if(bindingResult.hasErrors()) {

            return "registerPage";
        }
        else {
        userRepository.save(users);
        return "register-success";
        }
    }

Примечание. Если вы используете BindingResult, он должен быть точно после компонента.

Это только BindingResult, где порядок имеет значение.Он должен следовать за bean-компонентом, который проверяется, чтобы Spring знал, куда помещать ошибки проверки.

Благодаря ответу Дэвида Лавендера https://stackoverflow.com/a/29075342/6547517

0 голосов
/ 16 ноября 2018

Поле 'Зарплата' на объекте Пользователь может быть нулевым

...