Spring MVC Проверка формата даты с помощью JSR303 - PullRequest
1 голос
/ 20 февраля 2012

Я использую Spring MVC с JSR303 для проверки ввода.

Форма, которую я создал, содержит пару полей даты, которые связаны с Date объектами внутри объекта, поддерживающего форму.Я использую JSR303 для проверки Date с использованием @Future.Я также использую @DateTimeFormat(pattern="dd/MM/yyyy"), (я знаю, что это не проверка).

Как мне проверить формат даты String в форме?Если я оставлю другие обязательные поля пустыми (@NotEmpty) и введу недопустимую дату в форме «дд / мм / гг», она будет преобразована в «дд / мм / гггг» при повторном представлении (например, 12/03)./ 12 повторно представлен как 12/03/0012).Это означает, что я получу данные в моей системе.Если я введу «ааа», я получу исключение конверсии.Правильно отформатированные String s преобразуются в Date объекты.

Кроме того, аннотация 'обязательное поле' для полей Date должна быть @NotNull или @NotEmpty?

Большое спасибозаранее за любой предоставленный совет.

Ответы [ 2 ]

2 голосов
/ 21 февраля 2012

Спасибо, Ральф. Я еще немного покопался и придумал (что входит в мой контроллер формы):

    @InitBinder
    public void initBinder(WebDataBinder binder) {


    String format = "dd/MM/yyyy";
    SimpleDateFormat dateFormat = new SimpleDateFormat(format);
    dateFormat.setLenient(false);
    CustomDateEditor customDateEditor = new CustomDateEditor(dateFormat,true,format.length());

    binder.registerCustomEditor(Date.class, customDateEditor);
    }

С файлом свойств, имеющим следующий ключ:

typeMismatch.java.util.Date: Хорошее спокойное обнадеживающее сообщение, чтобы помочь всем небрежным пользователям

Может быть, есть и другие способы сделать это, но пока это подойдет.

1 голос
/ 20 февраля 2012

Вы не можете сделать это с JSR303, потому что проверка выполняется на уже заполненном объекте (кэширование формы).

Так что вам нужно реализовать свой собственный конвертер, который немного строже, чем тот, чтопоставляется с пружиной.

@ См. Пружина Справочник: Глава 6.5 Пружина 3 Преобразование типа

...