Я пишу веб-приложение с использованием Spring MVC. В моей jsp есть форма, содержимое которой отправляется с Ajax на мой контроллер. Упрощенный код для преобразованного метода выглядит:Spring MVC: Требуемый параметр даты 'date' нет
@RequestMapping(value = "/filter", method = RequestMethod.POST)
public String filter(@RequestParam(required=false) Date createdTo) { }
Я зарегистрировал CustomDateEditor с:
@InitBinder
public void registerBinders(WebDataBinder binder){
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
binder.registerCustomEditor(Date.class, new CustomDateEditor(format, true));
}
Когда строка в формы ввода является правильным исключение не генерируется. Проблема заключается в том, что, когда вход для даты пуст или содержит строку, которая не может быть преобразована в дату, я получаю исключение: Required Date parameter 'createdTo' is not present
.
Я даже написал свой собственный DateEditor, и во время его отладки я заметил, что проблема возникает, когда редактор устанавливает возвращаемое значение в значение null с setValue(null)
. Когда я изменил код, поэтому возвращаемое значение - текущая дата setValue(new Date())
, все работает даже для пустых строк.
Почему мой сопоставленный метод не позволяет иметь `@RequestParam (required = false) Дата createdTo 'null value? Почему это так и как я могу его лисицей?
Запрос высылается с:
$.ajax({
type: 'POST',
url: '<c:url value="/admin/documents/filter"/>',
data: data
}).done(doneFunction);
код контроллера:
@Controller
@RequestMapping ("/ администратора/документы") общественного класса AdminDocumentsController расширяет BaseController {
@InitBinder
public void registerBinders(WebDataBinder binder) {
binder.registerCustomEditor(Date.class, new DateEditor());
}
@RequestMapping(value = { "", "/" }, method = RequestMethod.GET)
public String showDocuments(Model model) {
model.addAttribute("so", new DocumentsSearchOptions());
return "admin/documents";
}
@RequestMapping(value = "/filter", method = RequestMethod.POST)
public @ResponseBody Map<String, Object> filter(@RequestParam String number,
@RequestParam String invoiceNumber,
@RequestParam String userSurname, @RequestParam(required=false) Double fromPrice,
@RequestParam(required=false) Double toPrice, @RequestParam(required=false) Integer fromPoints,
@RequestParam(required=false) Integer toPoints, @RequestParam String createdFrom,
@RequestParam(required=false) Date createdTo, @RequestParam String invoiceFrom,
@RequestParam String invoiceTo, @RequestParam String paidFrom,
@RequestParam String paidTo) {
Map<String, Object> model = new HashMap<>();
return model;
}
Даты и обертки объектов throw MissingServletRequestParameterException
w и их соответствующие поля ввода остаются пустыми.
Какова информация о переменной DATA в вашем сообщении ajax? – renanlf
Я пробовал две отправные данные в двух типах: a) 'var data = $ ('# form'). Serialize()', а затем он выглядел примерно так: param1 = & param2 = & param3 = ' b) чтение каждого ввод separetly и создание объекта данных: 'var param1 = $ ('# param1) .val(); var param2 = $ ('# param2) .val(); var data = { param1: param1, param2: param2 } ' – Nav