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