дат.
в дтохе тела ручки есть поле а-ля:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DATE_FORMAT)
val birthday: LocalDate?
хочется не ловить 500, если вдруг кто-то кинет какой-нибудь мусор. пришло в голову тупое решение навесить анноташку @Pattern(DATE_FORMAT), но это по очевидной причине не работает.
Почему не работает ?
Так в случае ошибки валидации будет ошибка 400, а не 500, так что всё нормально
нуу... 500 и 400 - не одно и то же) + можно перехватить MethodArgumentNotValidException, сформировать список всех ошибок в дтохе и кинуть в ответ
похоже потому, что валидация проходит после десериализации. если при десериализации случается DateTimeParseException, валидации не случится
Свой десериализатор лучше запили. Так быстрее будет
аааа, я понял, в чём дело. Ошибка именно в десериализации, а не в валидации. Тут сходу не подскажу, но для enum’ов в jackson’е можно установить null, если значение неизвестно. Для дат возможно есть подобная настройка, но в таком случае информация о первоначальной строке будет потеряна. Не уверен, что это позволено. Но разве ошибка десериализации не 400? Ведь на сервере всё ок
Сейчас проверил ваш кейс. У меня ошибка ловится в DefaultHandlerExceptionResolver и заворачивается в 400
ты прав. в контроллерАдвайс оверрайдится, похоже. там есть ловец Throwable но толку? проблема-то в другом.
Обсуждают сегодня