Spring Framework. Урок 24: Валидация форм. Аннотация @Valid.
HTML-код
- Опубликовано: 29 сен 2024
- Курс Minecraft: программирование на языке Python от GeekSchool для ваших детей
geekbrains.ru/...
ПОЛНЫЙ КУРС ПО SPRING (Hibernate, REST, Boot, Security): swiftbook.org/...
Продвинутая Java - swiftbook.org/...
Мои уроки по Java EE - • Java EE для начинающих
Популярные аннотации Hibernate Validator - alexkosarev.na...
Репозиторий стартового проекта - github.com/Nei...
Репозиторий урока - github.com/Nei...
Telegram: t.me/alishev_g
Реклама и сотрудничество: alishev.neil@gmail.com
ПОЛНЫЙ КУРС ПО SPRING (Hibernate, REST, Boot): swiftbook.org/courses/438
Плейлист этого курса: ruclips.net/p/PLAma_mKffTOR5o0WNHnY0mTjKxnCgSXrZ
Telegram: t.me/alishev_g
Отличный урок. Наиль, скажите пожалуйста, а уроки по Python ещё будут выпускаться?
@@СергейДмитриков-я4ф да, конечно. следующий
@@alishevN хорошая новость))
здравствуйте, урок супер всё посмотрел и с лайками. Только хотелось бы уточнить одну вешь, почему при использовании Valid исчезает вся css структура сайта и как это исправить?
с версией 7.0.0.Final - Hibernate Validator Engine НЕ РАБОТАЕТ! взял 6.*** и все полетело. Всем spring!
Та же история с 7.0.1.Final. Похоже, это связано с тем, что в версиях Hibernate Validator Engine 7.х.х нужные аннотации подтягиваются из библиотек "jakarta". Тогда как в более ранних версиях - из "javax".
спасибо, а то сидел и около часа искал в чём дело:D
Благодарю за подсказку!
Интересно, как заставить все это дело работать на версии 7.***?
@@АлексейВоздусевич Идея автоматом подтянула jakarta библиотеки и тогда первая валидация срабатывает остальные только после заполнения. А в шестой версии показывает аннотации как деприкейт - устаревшими, но все норм отрабатывает. Там еще 0 лет возможно не совсем валидно, я изменил на 1 год )))
@@dennispupkin1537 не работает, только empty на age, и то не корректно, может ты по другому как-то решил данную проблему?
Всё по полочкам, гениально. Спасибо!
В марте 2021г. в Maven Repository появились более новые версии Hibernate Validator (7.0.1.Final), которые не поддерживают архитектуру валидации в соответствии с этим уроком. В 7-й версии зависимость jakarta.validation (привязка к платформе JRE), в то время как ранее валидатор был не обязательный, подключаемый модуль API. При этом абсолютно не понятно, какая именно версия JRE нужна для работы с 7-й версией? - Он не выдаёт исключений в консоль, не говорит об ошибках, а просто ничего не делает! :)
Чтоб всё работало как в этом уроке, нужно использовать в файле pom.xml - javax.validation (6.2.0.Final). Если я ошибаюсь, то поправьте меня пожалуйста.
Спасибо
Да, Я тоже не вкурил "почему не работает?!"))) Спасибо!
И при этом, если поставить 6.2.0.Final то @NotEmpty и @Email будут отмечены как deprecated(устаревшие), но работать все будет
Безгранично благодарен
Не сразу понял, что здесь имелось в виду, поэтому на всякий случай напишу по-своему (вдруг кому пригодится).
В зависимостях нужно поменять только саму версию. То есть добавить hibernate validator, но версии 6.2.0.Final.
А затем в классах прописать в импорте аннотаций путь не "import jakarta.validation.constraints.Size", а "import javax.validation.constraints.Size"
Автор кидай новую инфу, так Valid вообще не работает даже с разными версиями
1) объясняете неплохо, но куча boilerplate кода (посмотрите как у Трегулова - 2 вьюшки(update использует тот же самый save)), зачем это надо - повторяться ?
2) пробовал вообще всё из комментариев, но валидация не завелась...
Update ! - валидация завелась на 6.2.0 (другие после этого и не пробовал) и с НЕ deprecated аннотациями. Если у вас тоже ничего не получается, обратите внимание на атрибут(object), который вы посылаете из вьюшки "new"(например, newPerson) и как вы его называете(в своём POST методе, т.е. должно быть так @ModelAttribute("newPerson") Person person), у меня проблема была в этом. Но претензия по лишнему шаблонному коду осталась, Прикладываю ссылку на свой код с комментариями - как применять ту же самую вьюшку "new" в случае когда просто update'им человека (прикол здесь в использовании скрытого поля id + пришлось изменить часть кода, т.к. сами разруливаем id, БД делала бы это сама).
github.com/imichikun/Update4AlishevProject
Самый лучшаэий сериал!
Ловлю 500-ю ошибку на Update - не понимаю в упор, почему валидация с Post работает, c patch пустая страница...
как сделать так, чтобы заработало с Hibernate Validator 7.0.0.Final?
зайди к нему в репозиторий,скачай зависимоть из pom.xml javax.validation
Продублирую свой комментарий для новичков: с 7ой версией почему-то не работает. Так же в 6ой версии импорт идёт от javax., а в 7ой - от jakarta.
Выход: используйте версию как в уроке и как говорил один известный комментатор - всё получится!
As explained here: "Hibernate Validator 6.2.0.Final and 7.0.0.Final released - In Relation To", you shouldn’t use Hibernate Validator 7 except if you’re migrating to Jakarta EE 9. Hibernate Validator 6.2 has the same feature set and is the version you should use.
Мы каким-то образом можем повлиять на ускорение выпуска материала? когда планируется ~60 уроков и они выходят так редко многое забываешь и приходиться заново вспоминать что было до этого.
ускорюсь)
@@alishevN спасибо большое будем все вам очень признательны. Спонсорство на вас тоже оформил но с другого аккаунта. Сейчас на youtube кроме ваших уроков ничего нет, везде обрывками и объясняют так что ничего не понятно. Вы же объясняете очень просто и доступно.
@@ГенадийПетрович-ы2е Спасибо! Рад стараться.
@@alishevN Добрый день, автолайк как обычно. Наиль если не сложно чекни почту пожалуйста, вопрос по плейлисту. По поводу предложения - если бы это реально ускорило - то вполне правомерно организовать сбор донатов по, к примеру 10$ до определенный суммы. Уверен что наберется очень быстро, причем все по делу и заслуженно.
@@pylyptiy Поддерживаю предложение я бы тоже скинулся. Если посмотреть на другие платные курсы и на то как там все объясняют и сравнить с вашими то понимаешь, что зря платил.
Но есть нюанс. У меня не работаем edit. Он говорит мне "type=Method Not Allowed, status=405". Очевидно, что он говорит о методе patch. Наиль, точно ли поддерживается patсh и т.д. в новых версиях? Притом если я удаляю "th:method="PATCH"", то ошибки нет, не падает, но новые данные не вводятся, меняешь возраст или имя, но остаются старые.
Java - 20
Spring 6.0.4
Thymeleaf-spring6 - 3.1.1.RELEASE
Jakarta.servlet-api - 6.0.0
Hibernate-validator - 8.0.1.Final
Ставте лайки, что бы мотивировать автора делать чаще уроки по спринугу!!! Это очень годно. Спасибо!
"Ваш ребёнок любит майнкрафт?" и прямо чувствую, как Наиль едва сдерживает смех)
Начинал смотреть на 19 видео. До 24 нашёл работу. :)
Спасибо за то, что вы делаете!
Какие проекты были выполнены на момент поиска работы ?))
Скажите, валидацию осуществляет @NotEmpty javax, Hibernate validator указан как depricated. Нужен ли тогда Hibernate validator?
Плюсую, хороший вопрос. Прошу дать ответ
Что я только не пробовал. Ничего не робит.
Как меня задолбали эти долбанные костыли во всех этих версиях шмерсиях. В одной версии так, через месяц нужно заново узнавать как теперь это делается.
Нереально обалденный лектор.....Видно, что человек понимает свою работу. Спасибо Вам , Автор.)))
Кому-то удалось подружить валидацию с Tomcat 10.1.11, Spring 6.0.10, Jakarta Servlet 6.0.0, Java 19?
Каждые 3-5 уроков сталкиваюсь с тем, что "теперь всё работает не так". Вроде 10-15 уроков назад ты, намучившись 2 дня, наконец подобрал версии томката, спринга и таймлифа, чтобы они все вместе наконец заработали. Но нет - в очередном уроке новая зависимость, которая опять не дружит со всей этой башней из хрусталя... Неужели в реальной разработке такая же фигня с версиями творится? Каждый раз выводит из себя эта дичь.
Может, вам удалось найти решение ?
@@zuz6631 к сожалению нет( пришлось просто пропустить реализацию валидации и идти по урокам дальше
Не понимаю прикола. Никогда проблем не было. Думаю, вы где-то ошиблись. К слову, у меня так каждый урок. Думаю, что проблема в софте, а проблема в пропущенной скобке
попробуйте вместо hibernate spring-boot-starter-validation:3.1.3
Урок неактуален для последней версии Hibernate Validator 7.0.0.Final
И как сделать так, чтобы заработало с Hibernate Validator 7.0.0.Final?
@@yusufmuradov9897 поставить версию как в видео
Не подскажете, с чем связана проблема? Тоже столкнулся с тем, что @Valid не работает((
@@ilyababcenco6864 ну это понятно. Я имел ввиду, что надо поменять в коде когда используешь версию 7.0.0?
Подскажите пожалуйтса - у вас в редактировании html странице в IDEA подсвечиваются подсказки по синтаксису, а у меня сплошной зеленый текст - как решить проблему?
Ссылка на пространство имен должна быть такая:
xmlns:th="www.thymeleaf.org">
Именно через три www.
Здравствуйте, мне удалось прикрутить к прошлому примеру из уроков канала базу данных PostgreSQL. Теперь требуется покрыть код юнит тестами. Где можно найти хорошую литературу по этой теме?
Про JUnit тестирование есть видео у Наиля в курсе Продвинутой джавы. На Udemy точно, про ютуб не помню
Прошел все по видео , действительно на 7 версии hibernate Validator не работает. Поставил 6.20 и тоже не заработало. Начал разбираться почему. Оказывается когда мы пишем в теге th:error его не существует, наверное потому что у меня новее версия thymeleaf 3.0.12. В общем решил проблему тем что написал th:errors( на конце "S") и все заработало. Надеюсь кому то поможет.
Что-то не работает. Чиерт. Все так же пропускает
Если у вас не отображаются ошибки на экране сделайте следующее:
1. Установите версию хибернет валидатора 6.0.17.Final
2. File -> Project Structure -> Modules -> Dependencies; Поставьте галочку экспорт напротив хибернет валидатор указанной версии
3. Откройте мавен, выберите пункты Clean, Comile и нажмите Run
после этого запускайте проект
спасибо, работает
спасибо!
Всм открыть мавен? Где эти пункты??
@@dmitrylubyanov7277 справа в Intellij IDEA есть закладка Maven
@@v.volkau Спасибо. При отправке формы возникает ошибка HTTP Status 500 в браузере с описанием "java.lang.NoSuchFieldError: TRACE" после того как поменял версию. Не знаете как решается? В интернете это объясняют как конфликт зависимостей, но как почистить старые - не знаю
12:47 Важный момент! Если bindingResult засунуть в конец сигнатуры- будет ошибка при исполнении
Долго копался в своём проекте, не понимая, что там не так (вместо нормального отображения ошибок в форме получал стектрейс со всеми этими ошибками), но ваш комментарий помог, благодарю)
@@ВладиславКоробко-е2и поторопитесь, скоро уроки по спрингу автор уберёт отсюда
@@СашаНемо-з2ы к счастью уроки давно пройдены, просто мне внезапно посчастливилось найти здесь решение проблемы с валидацией в другом проекте)
Что-то не поросло с валидатором. У кого-нибудь встречалась ошибка "Caused by: java.lang.ClassNotFoundException: javax.el.ELManager" при запуске? При добавлении зависимости javax.el-api (3.0.0) ошибка пропадает, но на веб-форме все равно валидация не работает. Использую tomcat 7 на idea community.
Сам себе отвечу) Заработало на idea community после того, как запустил tomcat 9 через плагин Smart Tomcat (plugins.jetbrains.com/plugin/9492-smart-tomcat). В pom.xml ничего лишнего не добавлял.
@@СергейК-п9ы8щ Спасибо дружище, помог
Наиль, спасибо огромное! Благодаря тебе и твоему каналу сейчас работаю java разработчиком. Изучал и изучаю Spring по твоим урокам, они лучшие! Успехов Тебе!
Круто!
А как без спринга работать джава разработчиком? Непойму
@@vadiknsk я читал некоторые истории, что ребята с простыми crud приложениями , с простенькой логикой, устраивались. А я пытаюсь запилить проект, который должен выполнить стажер в одну из компаний и там объем и логика точно не простого crud'a.
@@tuborg10 можешь показать текст этого задания? Или пдф
У меня проверки на двух страницах,2 разных entity и два разных post методов, на одном работает валидация все отображает,а на другом валидация тоже работает,но при этом не отображает текст ошибки на странице,в чем может быть проблема? написано аналогично
добавлю, что лучше не ставить хибернейт валидатор выше 6й ветки, иначе работать всё это не будет
Спасибо добрый человек, долго не мог понять почему не работает.
Все поля аннотированные @valid работают , кроме email не могу понять почему , главное аннотация @email работает ,а @notnull не работает
Подскажите, если у меня класс с аннотацией @Entity, я объявляю в нем поля с аннотациями @Column, то есть разница, что сначала указать над полем: аннотацию валлидации или анатацию @Column?
Большое спасибо за полезное видео!
А какие правила валидации для связанных переменных, если, например, при a > 0, b тоже должно быть больше нуля, и также при a < 0, b тоже должно быть меньше нуля?
Валидация форм обычно делается на фронтэнде, чтобы не нагружать сервер, разве нет? Да и к тому же в HTML 5 у инпута есть type="email", что гораздо упрощает проверку и сразу же выводит ошибку рядом с инпутом.
когда проходишь курс за деньги и понимаешь, что у Алишева, в ютубе, пользы больше). Понимание появляется, спасибо! Приобрел "продвинутую джаву" на udemy. С благодарностью за отличный, профессиональный контент!
не проще ли делать валидацию напрямую в html?
Самые ожидаемые видосы! Лайк не глядя
Блин, единственный минус всех видосов, так это что их тебе постоянно мало хочется еще и еще, прям как хороший сериал)) Автору просто лайк автомат + спонсорство, поддержим его)
Здравствуйте, код не работает с jakarta.validation.constraints после обновления org.hibernate.validator до 7.0.1Final bindingResult.hasErrors() всегда false. Не подскажете что поменять?
возьмите 6.2.0.Final версию
Мое решение проблемы с актуальными зависимостями
1)открываем Project Structure
2)заходим во вкладку Artifacts(в появившемся окне у меня были две строки 1- war 2- war exploded)
3)удаляем обе
4)нажимаем плюс, выбираем Web Application:Exploded ->From modules и выбираем свой
5)Apply
После этого начала работать валидация
Не смейте так делать. Последовал этому совету и теперь и сервер не запускается
У меня при заполнении тега th: не работает автозавершение ( нет подсказок), но код работает. Кто знает как исправить?
Нашел, у меня xmlns:th="www.thymeleaf.org" была без www
@@dimonhacker Где ты раньше был😀
Neil привет, как бы это нагло не звучало, можешь пожалуйста на следующем уроке связать крайнее приложение с базой данных, желательно через postgresql, буду очень признателен, спасибо заранее
так и планировалось
@@alishevN спасибо, жду не дождусь
А какой у вас плагин подсвечивает скобки в HTML файле?
Подскажите пожалуйста
заголовок thymeleaf-а нужен
@@armantulendi7320 Писал вручную - не подсвечивало. Скопировал тот же код из репозитория - и подсветка заработала.
@@Libra7by ++ так же
@@armantulendi7320 где?
27.07.2022
Вот эти работают:
javax.validation
validation-api
2.0.1.Final
org.hibernate.validator
hibernate-validator
7.0.4.Final
import javax.validation.constraints.Email;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Size;
Ждал выпуск дольше чем батю из магазина
NotEmpty и Size есть смысл вместе употреблять? Если у нас ограничение по длине, то автоматически уже не должно быть пустым поле.
Для тех, кто ставит hibernate-validator версии 6.2.* и выше. Чтобы все работало, надо кроме валидатора еще несколько вещей обновить:
- spring до 6.*.* версии
- thymeleaf-spring6 вместо thymeleaf-spring5
- вместо зависимости javax.servlet-api сделать jakarta.servlet-api (всё javax'овское переехало в пакет jakarta недавно)
- tomcat поставить 10-й версии
На Eclipse не смог активировать валидацию - BindingResult всегда false, менял dependency на все варианты в комментариях-таки сдался. Поднял на IDEA Comunity - все работает. Ну и ладно.
hibernate-validator работает на версии 6.2.3.Final это javax, все что выше version 7.x.x, 8.x.x это JakartaEE
Спасибо, Наиль! У меня один вопрос: Почему в этом проекте не подсвечивается пустой конструктор? Разве аннотация @ModelAttribute не использует пустой конструктор, чтобы создать объект?
Да, правда. Видимо, IntelliJ IDEA просто не видит этого.
У меня подсвечивается
используйте javax.validation.Valid а не jakarta
Как раз пересмотрел плейлист ещё раз, чтобы убрать все "непонятки" и вспомнить то, что забылось... и тут хоба - новый урок!
хОбана)))
может подскажете, в чем проблема. у меня выбрасывает error статус 500, валидация обрабатывается, но вот ошибка в браузере выводится. я по правде говоря jsp юзаю, но маловероятно, что велика разница
А кто-нибудь знает, почему если открыть проект на другой день, то попытка зайти на любой из доступных адресов вызывает 404? И только если перезапустить эклипс или обновить проект мейвена (что требует всякий раз исправлять ошибку версии jre, чтобы можно было использовать лямбда-выражение), то все нормально начнет работать.
педагог от Бога! спасибо
"Name should be between 2 and ТРИЦАТЬ characters." По-моему, каждый так иногда непроизвольно читает :))
Если в поле Email удалить .com, .ru и тд, то поле все равно проходит валидацию, а это неправильно.
А еще довольно легко писать собственные ограничения. "bean validation custom constraint" в гугле.
Спасибо вам огромное. Ваш контент невероятно ценен.
Пользуясь случаем, спрошу, как прикрутить картинку, например, аватару или портрет персоны?
Надо хранить ее где-то. Для этого надо БД подключить.
@@alishevN научите? :)
В чем разница между redirect и если просто вернуть хтмл страницу?
Почему то так и не заработало, перепробовал все варианты из комментариев, импортировал еще зависимости, которые указаны в статье про популярные аннотации и ничего
6 версию импортируй
@@СашаНемо-з2ы разные пробовал, тут в комментариях много какие советовали, в том числе несколько 6-х
@@maks-coder у меня вчера с последней шестой заработало
Держу в курсе: аналогично всё было - проект работает, ошибок в заполнении не видит.
Сменил версию на 6.1.6.Final и тут самое забавное: все импорты надо проверить, т.к. в 6ой версии импорт идёт от javax., а в 7ой - от jakarta.
Поэтому переписываете на 6ю версию, проверяете импорты и всё работает.
@@skanta Да у меня потом вообще какие то странные ошибки пошли, в итоге весь pom удалил, скопировал его у Наиля и все заработало
Наиль, подскажи пожалуйста, почему новосозданный человек отображается в /people только на время работы текущей сессии Томката? При перезапуске сервера он исчезает, остаются только те ребята, что были ручками вписаны в наш лист людей в PersonDao....Спасибо!
Потому что данные хранятся в ArrayList. Чтобы не исчезали, нужно подключать базу данных
Перед просмотром видео читайте комментарии!
у кого тупо не работает валидация - попробуйте вместо hibernate implementation spring-boot-starter-validation
не помогло(
Спасибо большое за уроки, заметил, что захожу на Udemy раз в пару дней, проверяя не вышел ли новый курс
я не ребенок но на курс запишусь))
Возраст должен быть больше нуля, но минимальное значение возраста "0", хочу посмотреть на пользователя с нулевым возрастом
Ребенок от рождения до 1 года не?
почему выполняется валидация сущности а не ДТО ?
потому что ты потом вместо класса Person делаешь маппинг с БД и обращаешься к полям этой базы данных
почему ошибка 500? полностью скопировал проект Наиля
Упал Tomcat. Переподключил полностью и все заработало)
Спасибо! Все, как всегда, на высоте: материал, подача, объяснение!
Может кто-то проходил этот урок с использованием hibernate-validator 7.0.0.Final - не срабатывает валидация. BindingResult приходит без ошибок. С версией 6.1.7 все ок
А как правильно делать на 7 версии знаете?
@@alishevN Я пробовал дебажить, такое ощущение, что в конфиге нужно прописать валидатор. т.к. судя по коду по умолчанию нет ни одного валидатора. Но как правльно делать - я не нашел :( Я еще дополнительно импортировал validation-api 2.0.1. и jakarta.el 4.0.1
@@yuripoboykin6106 Не нашли решение?
завелось на 6.1.7.Final, перепробовал несколько версий 6.*
@@alishevN Не знаем! Предположу что банально не отрабатывает проверка hasErrors(). Но как сделать не знаю. Подскажи!
Поставил лайки на все комментарии для активности, + коммент :)
Наиль, большое спасибо за ваши уроки! Все доступно и понятно, как всегда.
Замечательно!
Я человек простой, вижу новое видео от Наиля, ставлю лайк!
очень понятно и доступно! спасибо большое!
6.2.0.Final - заработало)
у меня пропали кнопки Update и Create пропали после этого урока. Откатываю назад на прошлый урок - кнопки появляются. Не могу найти в чём дело.
Советую сразу же отслеживать любые изменения в коде, запуская его, а в случае каких-либо ошибок сразу сравнивать с образцом (см ссылку на гит автора в описании).
Проект очень чувствителен даже к мелким ошибкам
Вам удалось решить проблему ?
Кто знает, как сделать чтобы в html файле, после точки, как в обычных фаилах, тоже выскакивали подсказки, для быстрого набора ?
в ссылке на пространство thymeleaf должно быть www
Бро спасибо тебе, ты красавчик!
Like Like Like! Спасибо!
Долгожданные видеоуроки)
Спасибо
@alishev Я не смотрел но уверен что видео топ🔥 как всегда.
Вопрос: будет ли урок о spring security?
будет)
Спасибо большое! Заждался 👍👍👍👍👍👍👍👍👍👍👍👍
Подскажите, пожалуйста, как выделить в html файлах разными цветами, чтобы IDE еще предлагала методы у переменных. Спасибо
скорее всего это плюшки ultimate версии
@@andreyyakubovskiy3587 у меня тоже ультима. Там фишка интересная, если сам пишу код в html файле, то ничего не подсвечивается и не выделяется, если копирую код с гитхаба автора, то все выделяется, как в видео) Вот я и не понял в чем прикол
@@СтасМихайлов-х7с разобрался как это исправить?
@@dressran3614 правильно ссылку на таймлиф написал) вроде там я забыл www или что-то такое. Основная проблема была именно в ссылке на таймлиф в самом начале
Спасибо
сразу лайк
Очень ждём Python! :)
У меня есть REST приложение на Spring Boot & Angular на фронте. Насколько нужна валидация форм в REST приложении, ведь валидация производиться на стороне клиента?
А если клиент сделает запрос через API, минуя фронт?
проврка полей на бэкенде важнее чем на стороне клиента. На стороне клиента просто проверяют ради того, чтобы ускорить процесс и каждый раз не посылать запрос на сервер
Просмотрел всё видео. С нетерпением жду новых выпусков!!! Cпасибо за творчество. Лайк подписка.
Отлично, спасибо
Zrazu like!
Ох как вовремя, чёрт возьми! До защиты диплома меньше двадцати дней остаётся.
Огромное спасибо за уроки! Жаль редко выходят ...
Как обычно приятно смотреть - все по сути!!!
Show must go on! Не останавливайся.)
Это супер!
Ну чтож, продолжаем)
Отличный курс, спасибо!
Вдргу для кого-то это будет тоже неочевидно: параметр BindingResult bindingResult должен быть сразу после параметра, аннотированного @Valid, а не просто после него в любом месте. У меня между ними был айди и редактирование не работало.
У вас заработала валидация? Если да, подскажите пожалуйста какие версии Tomcat, Java, Jakarta (или javax), Hibernate Validator, Jakarta Validator вы использовали?
Попробовал всё, что советовали в комментариях. Ничего не помогло(