Spring Framework. Урок 24: Валидация форм. Аннотация @Valid.
Vložit
- čas přidán 5. 08. 2024
- Курс Minecraft: программирование на языке Python от GeekSchool для ваших детей
geekbrains.ru/link/RBQIWF
ПОЛНЫЙ КУРС ПО SPRING (Hibernate, REST, Boot, Security): swiftbook.org/courses/438
Продвинутая Java - swiftbook.org/courses/415
Мои уроки по Java EE - • Java EE для начинающих
Популярные аннотации Hibernate Validator - alexkosarev.name/2018/07/30/b...
Репозиторий стартового проекта - github.com/NeilAlishev/Spring...
Репозиторий урока - github.com/NeilAlishev/Spring...
Telegram: t.me/alishev_g
Реклама и сотрудничество: alishev.neil@gmail.com
ПОЛНЫЙ КУРС ПО SPRING (Hibernate, REST, Boot): swiftbook.org/courses/438
Плейлист этого курса: czcams.com/play/PLAma_mKffTOR5o0WNHnY0mTjKxnCgSXrZ.html
Telegram: t.me/alishev_g
Отличный урок. Наиль, скажите пожалуйста, а уроки по Python ещё будут выпускаться?
@@user-uw4fo1cg1p да, конечно. следующий
@@alishevN хорошая новость))
здравствуйте, урок супер всё посмотрел и с лайками. Только хотелось бы уточнить одну вешь, почему при использовании Valid исчезает вся css структура сайта и как это исправить?
"Ваш ребёнок любит майнкрафт?" и прямо чувствую, как Наиль едва сдерживает смех)
Ставте лайки, что бы мотивировать автора делать чаще уроки по спринугу!!! Это очень годно. Спасибо!
В марте 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"
Самый лучшаэий сериал!
Начинал смотреть на 19 видео. До 24 нашёл работу. :)
Спасибо за то, что вы делаете!
Какие проекты были выполнены на момент поиска работы ?))
Нереально обалденный лектор.....Видно, что человек понимает свою работу. Спасибо Вам , Автор.)))
с версией 7.0.0.Final - Hibernate Validator Engine НЕ РАБОТАЕТ! взял 6.*** и все полетело. Всем spring!
Та же история с 7.0.1.Final. Похоже, это связано с тем, что в версиях Hibernate Validator Engine 7.х.х нужные аннотации подтягиваются из библиотек "jakarta". Тогда как в более ранних версиях - из "javax".
спасибо, а то сидел и около часа искал в чём дело:D
Благодарю за подсказку!
Интересно, как заставить все это дело работать на версии 7.***?
@@user-zn1bi4ov3v Идея автоматом подтянула jakarta библиотеки и тогда первая валидация срабатывает остальные только после заполнения. А в шестой версии показывает аннотации как деприкейт - устаревшими, но все норм отрабатывает. Там еще 0 лет возможно не совсем валидно, я изменил на 1 год )))
@@dennispupkin1537 не работает, только empty на age, и то не корректно, может ты по другому как-то решил данную проблему?
Всё по полочкам, гениально. Спасибо!
когда проходишь курс за деньги и понимаешь, что у Алишева, в ютубе, пользы больше). Понимание появляется, спасибо! Приобрел "продвинутую джаву" на udemy. С благодарностью за отличный, профессиональный контент!
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
Блин, единственный минус всех видосов, так это что их тебе постоянно мало хочется еще и еще, прям как хороший сериал)) Автору просто лайк автомат + спонсорство, поддержим его)
Самые ожидаемые видосы! Лайк не глядя
Спасибо! Все, как всегда, на высоте: материал, подача, объяснение!
Наиль, спасибо огромное! Благодаря тебе и твоему каналу сейчас работаю java разработчиком. Изучал и изучаю Spring по твоим урокам, они лучшие! Успехов Тебе!
Круто!
А как без спринга работать джава разработчиком? Непойму
@@vadiknsk я читал некоторые истории, что ребята с простыми crud приложениями , с простенькой логикой, устраивались. А я пытаюсь запилить проект, который должен выполнить стажер в одну из компаний и там объем и логика точно не простого crud'a.
@@tuborg10 можешь показать текст этого задания? Или пдф
очень понятно и доступно! спасибо большое!
Как раз пересмотрел плейлист ещё раз, чтобы убрать все "непонятки" и вспомнить то, что забылось... и тут хоба - новый урок!
хОбана)))
Поставил лайки на все комментарии для активности, + коммент :)
Наиль, большое спасибо за ваши уроки! Все доступно и понятно, как всегда.
Просмотрел всё видео. С нетерпением жду новых выпусков!!! Cпасибо за творчество. Лайк подписка.
Как обычно приятно смотреть - все по сути!!!
Спасибо большое за уроки, заметил, что захожу на Udemy раз в пару дней, проверяя не вышел ли новый курс
NotEmpty и Size есть смысл вместе употреблять? Если у нас ограничение по длине, то автоматически уже не должно быть пустым поле.
Спасибо за хорошие уроки, Наиль!!!))
Большое спасибо за полезное видео!
А какие правила валидации для связанных переменных, если, например, при a > 0, b тоже должно быть больше нуля, и также при a < 0, b тоже должно быть меньше нуля?
педагог от Бога! спасибо
Как всегда - хорош) Спасибо!
Долгожданные видеоуроки)
Единственный канал где я нажал на "колокольчик". Лучший контент! Спасибо вам огромное. Спасибо что не забрасываете это дело!
Подскажите, если у меня класс с аннотацией @Entity, я объявляю в нем поля с аннотациями @Column, то есть разница, что сначала указать над полем: аннотацию валлидации или анатацию @Column?
Наиль, ждем продолжение!!! Сделайте нам подарок к Новому году - новое видео, а желательно два!
Отличный курс, спасибо!
Я человек простой, вижу новое видео от Наиля, ставлю лайк!
Show must go on! Не останавливайся.)
Продублирую свой комментарий для новичков: с 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.
самый легкий и балдежный урок)
Спасибо большое за уроки!
Спасибо большое! Заждался 👍👍👍👍👍👍👍👍👍👍👍👍
как сделать так, чтобы заработало с Hibernate Validator 7.0.0.Final?
зайди к нему в репозиторий,скачай зависимоть из pom.xml javax.validation
Замечательно!
Скажите, валидацию осуществляет @NotEmpty javax, Hibernate validator указан как depricated. Нужен ли тогда Hibernate validator?
Плюсую, хороший вопрос. Прошу дать ответ
Мы каким-то образом можем повлиять на ускорение выпуска материала? когда планируется ~60 уроков и они выходят так редко многое забываешь и приходиться заново вспоминать что было до этого.
ускорюсь)
@@alishevN спасибо большое будем все вам очень признательны. Спонсорство на вас тоже оформил но с другого аккаунта. Сейчас на youtube кроме ваших уроков ничего нет, везде обрывками и объясняют так что ничего не понятно. Вы же объясняете очень просто и доступно.
@@user-bs4py5ev7q Спасибо! Рад стараться.
@@alishevN Добрый день, автолайк как обычно. Наиль если не сложно чекни почту пожалуйста, вопрос по плейлисту. По поводу предложения - если бы это реально ускорило - то вполне правомерно организовать сбор донатов по, к примеру 10$ до определенный суммы. Уверен что наберется очень быстро, причем все по делу и заслуженно.
@@pylyptiy Поддерживаю предложение я бы тоже скинулся. Если посмотреть на другие платные курсы и на то как там все объясняют и сравнить с вашими то понимаешь, что зря платил.
Автор кидай новую инфу, так Valid вообще не работает даже с разными версиями
Здравствуйте, мне удалось прикрутить к прошлому примеру из уроков канала базу данных PostgreSQL. Теперь требуется покрыть код юнит тестами. Где можно найти хорошую литературу по этой теме?
Про JUnit тестирование есть видео у Наиля в курсе Продвинутой джавы. На Udemy точно, про ютуб не помню
Подскажите пожалуйтса - у вас в редактировании html странице в IDEA подсвечиваются подсказки по синтаксису, а у меня сплошной зеленый текст - как решить проблему?
Ссылка на пространство имен должна быть такая:
xmlns:th="www.thymeleaf.org">
Именно через три www.
Ловлю 500-ю ошибку на Update - не понимаю в упор, почему валидация с Post работает, c 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
У меня проверки на двух страницах,2 разных entity и два разных post методов, на одном работает валидация все отображает,а на другом валидация тоже работает,но при этом не отображает текст ошибки на странице,в чем может быть проблема? написано аналогично
Долгожданное продолжение Х)
Ждал выпуск дольше чем батю из магазина
Все поля аннотированные @valid работают , кроме email не могу понять почему , главное аннотация @email работает ,а @notnull не работает
Это супер!
Огромное спасибо за уроки! Жаль редко выходят ...
Спасибо
может подскажете, в чем проблема. у меня выбрасывает error статус 500, валидация обрабатывается, но вот ошибка в браузере выводится. я по правде говоря jsp юзаю, но маловероятно, что велика разница
В чем разница между redirect и если просто вернуть хтмл страницу?
Но есть нюанс. У меня не работаем edit. Он говорит мне "type=Method Not Allowed, status=405". Очевидно, что он говорит о методе patch. Наиль, точно ли поддерживается patсh и т.д. в новых версиях? Притом если я удаляю "th:method="PATCH"", то ошибки нет, не падает, но новые данные не вводятся, меняешь возраст или имя, но остаются старые.
Валидация форм обычно делается на фронтэнде, чтобы не нагружать сервер, разве нет? Да и к тому же в HTML 5 у инпута есть type="email", что гораздо упрощает проверку и сразу же выводит ошибку рядом с инпутом.
Отлично, спасибо
Очень ждём Python! :)
Здравствуйте, код не работает с jakarta.validation.constraints после обновления org.hibernate.validator до 7.0.1Final bindingResult.hasErrors() всегда false. Не подскажете что поменять?
возьмите 6.2.0.Final версию
А кто-нибудь знает, почему если открыть проект на другой день, то попытка зайти на любой из доступных адресов вызывает 404? И только если перезапустить эклипс или обновить проект мейвена (что требует всякий раз исправлять ошибку версии jre, чтобы можно было использовать лямбда-выражение), то все нормально начнет работать.
Для тех, кто ставит hibernate-validator версии 6.2.* и выше. Чтобы все работало, надо кроме валидатора еще несколько вещей обновить:
- spring до 6.*.* версии
- thymeleaf-spring6 вместо thymeleaf-spring5
- вместо зависимости javax.servlet-api сделать jakarta.servlet-api (всё javax'овское переехало в пакет jakarta недавно)
- tomcat поставить 10-й версии
Если у вас не отображаются ошибки на экране сделайте следующее:
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" после того как поменял версию. Не знаете как решается? В интернете это объясняют как конфликт зависимостей, но как почистить старые - не знаю
6.2.0.Final - заработало)
Наиль, подскажи пожалуйста, почему новосозданный человек отображается в /people только на время работы текущей сессии Томката? При перезапуске сервера он исчезает, остаются только те ребята, что были ручками вписаны в наш лист людей в PersonDao....Спасибо!
Потому что данные хранятся в ArrayList. Чтобы не исчезали, нужно подключать базу данных
А какой у вас плагин подсвечивает скобки в HTML файле?
Подскажите пожалуйста
заголовок thymeleaf-а нужен
@@armantulendi7320 Писал вручную - не подсвечивало. Скопировал тот же код из репозитория - и подсветка заработала.
@@Libra7by ++ так же
@@armantulendi7320 где?
Спасибо, Наиль! У меня один вопрос: Почему в этом проекте не подсвечивается пустой конструктор? Разве аннотация @ModelAttribute не использует пустой конструктор, чтобы создать объект?
Да, правда. Видимо, IntelliJ IDEA просто не видит этого.
У меня подсвечивается
hibernate-validator работает на версии 6.2.3.Final это javax, все что выше version 7.x.x, 8.x.x это JakartaEE
Ура, шикарно
Если в поле Email удалить .com, .ru и тд, то поле все равно проходит валидацию, а это неправильно.
Ох как вовремя, чёрт возьми! До защиты диплома меньше двадцати дней остаётся.
Что-то не работает. Чиерт. Все так же пропускает
Прошел все по видео , действительно на 7 версии hibernate Validator не работает. Поставил 6.20 и тоже не заработало. Начал разбираться почему. Оказывается когда мы пишем в теге th:error его не существует, наверное потому что у меня новее версия thymeleaf 3.0.12. В общем решил проблему тем что написал th:errors( на конце "S") и все заработало. Надеюсь кому то поможет.
Спасибо, зашло.
Ну чтож, продолжаем)
12:47 Важный момент! Если bindingResult засунуть в конец сигнатуры- будет ошибка при исполнении
Долго копался в своём проекте, не понимая, что там не так (вместо нормального отображения ошибок в форме получал стектрейс со всеми этими ошибками), но ваш комментарий помог, благодарю)
@@user-tv3nu3cr5s поторопитесь, скоро уроки по спрингу автор уберёт отсюда
@@user-ml2tp5xh1m к счастью уроки давно пройдены, просто мне внезапно посчастливилось найти здесь решение проблемы с валидацией в другом проекте)
Спасибо вам огромное. Ваш контент невероятно ценен.
Пользуясь случаем, спрошу, как прикрутить картинку, например, аватару или портрет персоны?
Надо хранить ее где-то. Для этого надо БД подключить.
@@alishevN научите? :)
Мое решение проблемы с актуальными зависимостями
1)открываем Project Structure
2)заходим во вкладку Artifacts(в появившемся окне у меня были две строки 1- war 2- war exploded)
3)удаляем обе
4)нажимаем плюс, выбираем Web Application:Exploded ->From modules и выбираем свой
5)Apply
После этого начала работать валидация
Не смейте так делать. Последовал этому совету и теперь и сервер не запускается
Подскажите, пожалуйста, как выделить в html файлах разными цветами, чтобы IDE еще предлагала методы у переменных. Спасибо
скорее всего это плюшки ultimate версии
@@andreyyakubovskiy3587 у меня тоже ультима. Там фишка интересная, если сам пишу код в html файле, то ничего не подсвечивается и не выделяется, если копирую код с гитхаба автора, то все выделяется, как в видео) Вот я и не понял в чем прикол
@@user-un1zt3mj8u разобрался как это исправить?
@@dressran3614 правильно ссылку на таймлиф написал) вроде там я забыл www или что-то такое. Основная проблема была именно в ссылке на таймлиф в самом начале
добавлю, что лучше не ставить хибернейт валидатор выше 6й ветки, иначе работать всё это не будет
Спасибо добрый человек, долго не мог понять почему не работает.
сразу лайк
@alishev Я не смотрел но уверен что видео топ🔥 как всегда.
Вопрос: будет ли урок о spring security?
будет)
А еще довольно легко писать собственные ограничения. "bean validation custom constraint" в гугле.
Zrazu like!
Класс!
У меня при заполнении тега th: не работает автозавершение ( нет подсказок), но код работает. Кто знает как исправить?
Нашел, у меня xmlns:th="www.thymeleaf.org" была без www
@@dimonhacker Где ты раньше был😀
Like Like Like! Спасибо!
я не ребенок но на курс запишусь))
Что-то не поросло с валидатором. У кого-нибудь встречалась ошибка "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 ничего лишнего не добавлял.
@@user-ip4lg6zu4u Спасибо дружище, помог
Перед просмотром видео читайте комментарии!
У меня есть REST приложение на Spring Boot & Angular на фронте. Насколько нужна валидация форм в REST приложении, ведь валидация производиться на стороне клиента?
А если клиент сделает запрос через API, минуя фронт?
проврка полей на бэкенде важнее чем на стороне клиента. На стороне клиента просто проверяют ради того, чтобы ускорить процесс и каждый раз не посылать запрос на сервер
у меня пропали кнопки Update и Create пропали после этого урока. Откатываю назад на прошлый урок - кнопки появляются. Не могу найти в чём дело.
Советую сразу же отслеживать любые изменения в коде, запуская его, а в случае каких-либо ошибок сразу сравнивать с образцом (см ссылку на гит автора в описании).
Проект очень чувствителен даже к мелким ошибкам
Вам удалось решить проблему ?
Neil привет, как бы это нагло не звучало, можешь пожалуйста на следующем уроке связать крайнее приложение с базой данных, желательно через postgresql, буду очень признателен, спасибо заранее
так и планировалось
@@alishevN спасибо, жду не дождусь
ТОП Видос
"Name should be between 2 and ТРИЦАТЬ characters." По-моему, каждый так иногда непроизвольно читает :))
ТОП!!
Всё заработало - Tomcat 9, jakarta.validation-api-2.0.2.jar и hibernate-validator-6.2.0.Final.jar
Можете пожалуйста поделить файлом pom.xml вашего проекта? Хочется понять каковы остальные версии в вашей сборке
почему выполняется валидация сущности а не ДТО ?
потому что ты потом вместо класса Person делаешь маппинг с БД и обращаешься к полям этой базы данных
На Eclipse не смог активировать валидацию - BindingResult всегда false, менял dependency на все варианты в комментариях-таки сдался. Поднял на IDEA Comunity - все работает. Ну и ладно.
Кто знает, как сделать чтобы в html файле, после точки, как в обычных фаилах, тоже выскакивали подсказки, для быстрого набора ?
в ссылке на пространство thymeleaf должно быть www
Бро спасибо тебе, ты красавчик!