Я работаю над проверкой на стороне сервера с использованием интерфейса 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");
}
}