Как выполнить проверку на стороне сервера с помощью интерфейса Validator - PullRequest
0 голосов
/ 23 марта 2020

Я работаю над проверкой на стороне сервера с использованием интерфейса Spring Validator. Этот код дает мне сообщение «Причина: java .lang.IllegalStateException: Аргумент Errors / BindingResult объявлен без предшествующего атрибута модели. Проверьте сигнатуру метода обработчика!». Я не могу изменить свою подпись метода, чтобы использовать @ModelAttribute и необходимый объект. Мне нужно так и оставаться. Как я могу использовать bindingResult таким образом? Спасибо)

Класс валидатора

@Component
public class EmployeeTripOrderValidator implements Validator {

    @Autowired
    private TripOrderService tripOrderService;

    @Override
    public boolean supports(Class<?> aClass) {
        return EmployeeTripOrder.class.equals(aClass);
    }

    @Override
    public void validate(Object o, Errors errors) {

        EmployeeTripOrder employeeTripOrder = (EmployeeTripOrder) o;
        Integer id = employeeTripOrder.getId();

        String number = employeeTripOrder.getNumber();

        Integer year = Integer.parseInt(new SimpleDateFormat("YYYY").format(employeeTripOrder.getDate()));

        boolean isNumberExist = tripOrderService.checkNumberByYear(id, number, year);

      if (!isNumberExist){
                errors.rejectValue("number", "Number already exists");
        }

    }
}

Мой контроллер

  @Autowired
    private EmployeeTripOrderValidator employeeTripOrderValidator;

 @RequestMapping("/addEmployeeTripOrder")
    public String addEmployeeTripOrder(HttpServletRequest request,
                                       @RequestParam("signedById") String signedById,
                                       @RequestParam("signersListId") String signersListId,
                                       @RequestParam("trip_cards") String tripCards,
                                       @RequestParam("orderDate") String date,
                                       @RequestParam("orderNumber") String orderNumber,
                                       @RequestParam("dependenceTypes") String dependenceType,
                                       @RequestParam("dependenceOrderIds") String dependenceOrderId,
                                       @RequestParam("orderType") String orderType,
                                       BindingResult bindingResult,
                                       ModelMap modelMap) {

                                    EmployeeTripOrder employeeTripOrder = employeeTripOrderService.fillEmployeeTripOrder(employeeTripOrder, date, orderType, signedById, signersListId, employeeCardOrderLinks);

                                       employeeTripOrderValidator.validate(employeeTripOrder,bindingResult);

            if (bindingResult.hasErrors()) {
                throw new Exception("Validation errors");
            }

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