Spring Framework. Урок 23: CRUD приложение. PATCH, DELETE запросы.
Вставка
- Опубліковано 16 жов 2020
- ПОЛНЫЙ КУРС ПО SPRING (Hibernate, REST, Boot, Security): swiftbook.org/courses/438
Продвинутая Java - swiftbook.org/courses/415
Мои уроки по Java EE - • Java EE для начинающих
Код для конфигурации фильтра - gist.github.com/NeilAlishev/2...
Репозиторий стартового проекта - 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
Плейлист этого курса: ua-cam.com/play/PLAma_mKffTOR5o0WNHnY0mTjKxnCgSXrZ.html
Telegram: t.me/alishev_g
Если у Вас не работают методы edit и delete, несколько вариантов возможного решения:
1. в контроллере проверьте аннотации метода и его аргументы
@Annotation ("/{id}")
2. Очистите Maven (lifecycle -> clean)
3. проверьте синтаксис . В крайнем случае скопируйте код html страниц alishev
4. Ну и в крайнем случае перепишите lambda
Жаль раньше не увидел ваш комментарий сохранил бы себе целый вечер. Спасибо
clean помогло, не понимаю почему?
Помогла очистка мавен, спасибо
а где в настройках можно найти и очистить maven?
@@user-qt6ly9wu4b в правом sidebar будет вкладка maven. Нажимаете и появляется функциональный блок. Там lifecycle / clean
@@pavelrakovich2658 спасибо
Да, не останавливайся на этом. У тебя хорошо получается объяснять. Один из лучших что я видел в инете. Продолжай пожалуйста, ты приносишь пользу людям.
Каждый раз радуюсь выходу нового видео, как новой серии любимого сериала!)
Ваш курс по Spring жизненно необходим! Очень хотелось бы, чтобы уроки выходили по чаще, и для этого я готов поддерживать ваш канал на постоянной основе:) Пусть сумма и небольшая, но, как мне кажется, она даст чуточку мотивации) Ребят, кому интересен данный курс, и у кого есть столь символическая лишняя сумма в месяц (100 рублей), оформите спонсорство, думаю, что автор канала будет очень рад, а также и в дальнейшем будет радовать нас выходом новых познавательных роликов)
Спасибо!)
ждал новое видео, как глоток свежего воздуха! спасибо!
Наиль, спасибо, очень полезные и понятные уроки, спасибо что открываете мне современную джаву. Жду следующего видео с нетерпением!
Дядька! Очень доступно поясняешь, не останавливайся с курсом Spring Framework!
Спасибо огромное !!))) Если можно, побольше уроков по спрингу !)) Купил ваш курс по продвинутой джаве, он просто супер, понятно и доходчиво!))
Спасибо огромное! тоже жду каждую серию как домохозяйки любимый сериал! :)
Спасибо за хорошие уроки, Наиль! Вы настоящий профессионал своего дела.
Спасибо огромное за курс, прохожу стажировку по Java, и ваши уроки мне жизненно не обходимы , прошу вас продолжать, пожалуйста
Те кто зашел за решением ошибки 405. Попробуйте сделать пересборку maven(Правая панель сверху Maven -> -> Lifecycle ->>> clean П.С. лично мне помогло это). Как я понял 405 возникает из-за того, что формы из HTML все также отправляют запрос POST несмотря на th:method(а метод контроллера ждет DELETE запрос и так как запросы разные, то Spring и выбрасывает 405), т.е. почему-то фильтр автора, который должен ловить скрытый input _method, не работает(так и не разобрался почему).
UPD: На следующий день, когда я приступил к 24 уроку заметил кое-что необычное. Я использую VCS(git) через IDE, и после пересборки зависимостей заметил, что гит фиксирует удаление 3 файлов (application.xml, web.xml, index.jsp), которые были удалены еще на начальном этапе изучения Spring MVC (16 урок). Так вот, в одном из коментов было решение удалить эти файлы. Мне кажется фильтр в конфигурации не работает потому, что java конфигурация в принципе не читается springом. Возможно это какой-то баг или сервера или spring, из-за которого каким-то образом spring продолжает использовать web.xml(хотя физически его уже нет в проекте), а не java конфигурацию, поэтому и фильтры в конфигурации не работали.
Огромное тебе спасибо, дорогой друг!
спасибо, дружище
Огромное спасибо, выручил!
Спасибо !
Отличный урок! Профессионал!
Ждем продолжения :)
Это гениально. Объяснение максимально ясное! Пусть не с первого раза я понимаю всё происходящее, но проще уже точно некуда, благодарение, сенсей!
Огромное спасибо! Как всегда на высшем уровне! Ещё бы Rest-template)
Супер, материал подон с высоким уровнем, спасибо, ждемс новых видосов.
Спасибо за этот курс. Педагог от Бога )
спасибо за курс по spring core
Класс, огромное спасибо за уроки!
Супер уроки. спасибо Вам за видео)
Отличный плейлист. Спасибо.
Супер, очень ждал!
Рахмет Вам большой за труды!
Спасибо, твои уроки самые понятные. Жаль полного курса ждать долго... можешь что нибудь посоветовать для самостоятельного изучения спринга и jpa?
Спасибо, добра и счастья Вам )
Отлично, классно всё понятно жду новое видео 👍👍👍👍👍
Крутяк!) Спасибо за видео)
Какой большая работа проделана. Спасибо тебе за труд!
В восторге от курса! p.s. Синтаксис thymeleaf это конечно что-то с чем-то)
Это дичь, конечно
чисто создаем людей за секунды )))
курс очень крутой!
Большущее спасибо! Своим комментом хочу показать, что не только год назад все учились по этому курсу.
Но и 5 лет вперед?)ахаха
Ты потрясающий!
Предлагаю в следующем уроке рассмотреть обращения и операции к двум связанным таблицам и затронуть тему валидации.
Большое спасибо!
Спасибо вам!!)))
Блиин а где дальше Секьюрети
Как работать с Бутстреп допустим
Как работать с БД , блиииин нужны дальше твои курсы, ты единственный кто реально нормально объяснять насколько сложный материал((((((((все очень ждут проду((((
Почему-то не читаются скрытые запросы из Post запроса, выдаёт 405, фильтер добавил. вроде всё должно работать :(
такая же фигня(
Мне помогла чистка проекта и последующий перезапуск сервера. В идее справа вкладка maven - lifecycle - clean. Возможно какой-то косяк с плагинами при билде проекта
@@samayn507 Спасибо! Помогло!!! Только не совсем понятно почему до этого не работало?)
@@samayn507 Спасибо за подсказку! Всё заработало!
Для тех кто дальше будет читать. Была такая же проблема, даже майвен клин не помогал. В итоге оказалось, что ошибка в синтаксисе. вместо {/id} было (/id). Целый день искал пробему.
А вот это хорошо:
th:action="@{/people/{id}(id=${person.getId()})}"
по нечитаемости не уступает Lisp-у и Perl-у, и даже превосходит.
Не ожидал в 21 веке увидеть такого синтаксиса.
привет, запили видос по микросервисам! очень полезная сегодня вещь!
За все время работы, ни разу не встречал использования PATCH. Для апдейтов всегда использовался PUT.
Больше спринга богу спринга! Большое спасибо! =)
"Мы можем создавать людей, мы можем удалять людей" =))
За удаление людей, статья уголовного кодекса =)))
спасибо за уроки, очень хорошо рассказываешь!
Судя по тому что в репозитории с кодом занятий 19 дней назад появилась папка Hibernate, ждать осталось недолго. Как всегда прекрасно, Наиль, спасибо за уроки)))
оказывается ждать долго
@@timon59388 очень долго
@@johncarter494 прям супер долго
Спасибо за курс! Какой плагин используешь для удобства редактирования html?
Спасибо большое
Ура ура!!
Будут ли еще видео курсы по спрингу (Spring Boot)??
Очень хотелось бы увидеть spring security
А будет применение какого-нибудь графического фреймворка по типу Bootstrap со спрингом?
Спасибо
Спасибо за курс, вся информация легко воспринимается)) Мне интересно, в реальных проектах вообще используются вьюшки? Понимаю, что здесь для наглядности делаем, но всё таки интересно, это ведь фронтенд часть, или где-то пишут сайты только на спринге?
Скажите, а асинхронно rest в java делают?
Спасибо за классную подачу материала!
Что будет дальше, Spring Boot? )
он тоже будет)
@@alishevN А по каким материалам лучше изучать Spring Boot, Ваше мнение?
И что логичнее изучать по Java после текущего урока?
еееееее, ман👍🏼
super
Везде используют только GET и POST. Сделайте урок, пожалуйста, ТОЛЬКО по HEAD, CONNECT и OPTIONS - про это вообще нигде толковой информации нет!
Добавлю свое решение ошибки 405 (для тех кто не может победить и очистка не помогает):
Проверьте взяли ли вы в аннотациях id в фигурные скобки - "/{id}".
Я в фигурные не взял, тоже ловил 405.
Снова спасибо!
14:50 - а почему при update просто не использовать встроенный в коллекцию метод set?
set(index, object). А мы ищем по id, а это поле объекта. Нельзя вызвать people.set(5, ...), где мы думаем, что 5 это id. Это индекс массива. Все равно надо фильтровать и искать нужного person'а :)
Подскажите, как настроить подсказки при создании html страницы с использованием thymeleaf в intellij idea? На видео они есть, у меня нет. Как только ставить th: дальше нужно писать все руками, ошибки никак не показываются
для тех у кого ошибка HTTP Status 405 - Method Not Allowed
если вы как и я оставляли с предыдущих уроков web.xml и applicationContextMVC.xml, то удалите их, очистите Maven (lifecycle -> clean), пересоберите проект и заново запустите.
если же этих файлов у вас нет, но ошибка все равно есть, то просто очистите Maven (lifecycle -> clean), пересоберите проект и заново запустите.
Спасибо. Ваш совет помог. Удалил 2 файла и всё заработало.
Наиль, создай видеокурс типа «философия изучения документации» плох тот программист, который учится по таким уроках, они понятны, удобны, да и у тебя есть определённый талант преподавания, но пока дождёшься всех технология на твоё канале - уйдёшь джуном на пенсию)
Автор, спасибо за уроки по спрингу! Максимум конкретики, минимум - воды.
Единственное, что пока не могу понять, зачем нужна аннотация @Configuration? Я понимаю, что @Configuration - это аналог xml файла. Ее пихают во всех гайдах, но все работает и без нее (либо через @Component, либо через @ComponentScan). + идея сразу ругается: Application context not configured for this file...
Для чего надо конфигурировать проект? Для статического анализатора кода?
Вопрос: есть ли ситуация, где без @Configuration ну никак не обойтись? Или эта аннотация больше для удобства?
gorgeous
О, я как раз недавно до 22 урока дошел
Если кто пишет на spring boot и не знает как подключить фильтр, используемый в данном видео, то нужно просто вставить в файл application.properties следующую строку: spring.mvc.hiddenmethod.filter.enabled=true
большое спасибо!
где искать этот файл?
лайк
Наиль! Огромное спасибо за уроки, вы потрясающий преподаватель! У меня вопрос по теме данного урока: в методе update не видно сохранения(people.set()) обновленного person в массив people. Однако все работает -- это таки магия?
Мы получаем ссылку на объект, который уже лежит в списке и меняем его поле. Сохранять не нужно, ибо объект не новый, а тот же.
@@krampus1444 Спасибо! Получается чисто семантическая путаница - в списке лежат не объекты, а только ссылки на них. Доступ к объектам возможен напрямую, не только из списка.
Все делаю как в видео , однако фильтрация не срабатывает , подскажите решение
Наиль, а какую строчку дописать для Spring Boot для FIlter???
в application.properties: spring.mvc.hiddenmethod.filter.enabled=true
Не помог фильтр в конфигурационном файле, все равно Request method 'POST' not supported. У одного меня так?
Нашли как исправить?
@@kqlqk276 А вы нашли как исправить?
Пытаюсь найти логику, но всё никак. Подскажите, пожалуйста, если есть необходимось в проекте иметь два метода update с аннотацией @PatchMapping("/{id}"), как нам тогда контролировать какой из этих методов должен вызваться, ведь в html файле мы с помощью thymeleaf указывем только тип метода th:method="PATCH"
Может у кого-то также не заработал метод update, а точнее продолжает искать метод с POST, даже после установки фильтра? Сделал все как показано на видео, по коду на сайте видно: появился скрытый input. Если кто знает что делать, подскажите)
такая же фигня
В реальной жизни мы можем иметь объект с сотнями полей а редактировать через форму нам, к примеру, нужно только три поля. Если мы редактируем объект помощью метода PATCH, то поля, не указанные в форме, принимают значение null. При этом аннотация @ModelAtribute создает в модели новый объект. Подскажите пожалуйста, как с этим бороться?
А когда мы пишем delete метод в атрибуте формы, то Таймлиф его преобразует через скрытое поле _method ?
Да
использую к примеру классы и методы и не понимаю что они делают а заходя в интернете вся информация поверхностноя или написано (она рисует) но когда вызываешь метод рисования он не выдаёт ошибку вроде все нормально но как запускаешь приложение оно просто вылетает. Мне не нравится такой подход я как с завязанными глазами наощуп перебераю камни что бы найти тот самый камень который мне нужен. Посоветуйте( базу выучил) но почему-то не могу писать программы или пишу просто перебирая библиотеки на заданную задачу.
Спасибо большое за курс!
Интересный вопрос: достаточно ли знаний, полученных в ходе прохождения этих базовых курсов, для трудоустройства на позицию джуна?
Пробуйте. Зависит от компании.
Зависит от того на сколько хорошо усвоены уроки и твои способности применять полученные знания.
Ну я пытался, сказали недостаточно знаний Spring'a, минимум должен дотянуть до RestFul сервиса с БД, с Hibernate
@@ShaddTM00 а в этом курсе разве не RestFul сервис?
@@Kubzay пока что нет
Ето последнее видео курса по Спрингу ? Если да то огромное тебе спасибо за проделаний труд )))!!!
Нет, далеко не последнее)
@@alishevN Могу ли я попросить тебя всерьёз заняться етим курсом и випустит все необходимие видео по етому курсу до конца???!!! Очень прошу, пж )))!!!!!!!!
Отличный курс! Не хватает реализации с БД.
будет)
Отлично! Перевернул весь русскоязычный ютуб. Самый лучший курс по spring для новичка !
@@user-qx2qq2jr2h
удваиваю!)
У меня почему-то и без фильтра всё хорошо отрабатывает. При этом использовал аннотации и название метода в html как и у Наиля
омайгайд сделал вроде бы все так, как в уроке, но патч запрос все равно не хочет обрабатываться. Памагите!
подскажите пожалуйста, что делать если у меня текст в html не подсвечивается при ошибке, почити монотонный, работает как положено, так даже в скобках не разберешся
Наиль, добрый вечер ! На протяжение долгого времени смотрю Ваши видео и они просто супер .
У меня есть небольшой вопрос , Вам когда нибудь приходилось работать с gRPC? Если да , то не могли бы подсказать как лучше обработать http запрос который поступает в виде XML сообщения в первый модуль и отправляет gRPC запрос во втрой модуль который возвращает ответ ?
Буду благодарен за любую подсказку, спасибо !
Здравствуйте!
А если все делать с помощью gRPC без xml?
Дело в том , что запрос приходит в виде XML сообщения . В первую очередь как я понимаю надо сделать unmarshaling. Получить поле которое будет содержать буквы и сделать gRPC вызов во второй модуль который преобразует буквы в числовое значение , то есть второй модуль сходит в БД сопоставит полученные буквенные значение с цифрами и их вернёт ( например , букве «а» соответсвует 1) . gRPC отправляет “a” в ответ получает 1
Звучит ок
Можно без id обновлять, мы же его и так в модели отправляем
Вы говорили, что, работая на Spring Boot, чтобы работал метод PatchMapping, всего лишь нужно в конфиге указать одну строчку. Подскажите, где её найти? Никак не хочет работать PatchMapping...
spring.mvc.hiddenmethod.filter.enabled=true
в проперти файл добавь
Ошибка 404. Ох и намучался поиском решения... Вопрос решен новым набором версий. Пока понял что проблема в этом, день в трубу... До сего момента все отлично работало на tomcat 9, thymeleaf 5 и spring 6. Теперь все работает на комбинации:
thymeleaf 6
tomcat 10
spring 6
Отличный видеоурок. Только у меня не пропадает ошибка 405 Method not allow. Даже после того как я вставил код который редиректит запросы по _method. Может кто знает в чем проблема? Заранее спасибо
Фильт, почему-то не сработал. Пришлось делать @PostMapping вместо @PathcMapping
У меня тоже не сработал. Странно.
@@user-ve4ko4pi7i аналогично
@@kracoz8397 У меня также было, но я открыл код урока на гитхабе и скопипастил, то что делали.
Ошибку не понял, но всё заработало =)
Братан у меня не сработал этот -> hiddenHttpMethodFilter в чем может бить проблема можете сказать
У кого ошибка 405, просто зайдите в maven(справа на экране) --> разверните вашу папку с maven --> lifecycle --> clean, затем сделайте перезапуск сервера.
ааааааааааааааааааааааааааа спасибоооооооооооооооооооооооооооооооооооооооооо броооооооооооооооооо!!!!!!!!!!!!!!!!!!!!!!!!!!!!!👏
очень помог, весь вечер не мог понять в чем дело)
@@user-eo6sl7yb2l Рад что помог вам)
Помог)
@@nikita-ku2ed 👍🏼
Как у тебя в обучении результат, на работу попал?
подскажите , после запуска приложения стала появляться ошибка "HTTP Status 500 - Internal Server Error"
после добавления метода делет
в методе delete возможно ошибка в строке return "redirect:/people" - , например не поставили :
delete работает, edit - открывает пустую страницу без тела и скрытых реквизитов... перепробовал уже все танцы с бубнами, хз в чем проблема может быть
почему вместо редиректа не использовать просто возврат модели?
После post запросов нужно использовать redirect, чтобы избежать повторной вставки.
без добавления фильтра работало корректно, как при добавлении...добавил фильтр и работает(точнее не работает) как без него....чудеса 0_о
Шел по порядку, всё сделал верно(перепроверил несколько раз), а кнопка Delete не появилась. С чем может быть связана проблема?
Эм. Очень странно, но ок. Вместо "www.thymeleaf.org" у меня было "thymeleaf.org". При этом всё ранее написанное работало, но вот кнопка удаления отказалась. Мб я чего-то не понимаю, но разве это разные урлы?
delete работает без лямбда выражения если в delete (PersonDAO) как в update передать show(id) в people.remove(show(id)).
У меня пустая страница, когда прописываю "/edit"
Проблема с кодировкой UTF-8. В SptingConfig установил кодировку templateResolver.setCharacterEncoding("UTF-8"). Это научило спринг отдавать понятную кириллицу. А вот если править русское имя person в форме, то в спринг с формы приходит уже кракозябры (непонятная кодировка). Как лечить?
Для решения этой проблемы нужно сделать следующие вещи:
1.В файле pomxml между тегами после строки UTF-8
добавить строку UTF-8.
2.В файле MySpringMvcDispatcherServletInitializer.java в методе onStartup добавить строки:
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
characterEncodingFilter.setForceEncoding(true);
FilterRegistration.Dynamic filterRegistration = aServletContext
.addFilter("characterEncodingFilter", characterEncodingFilter);
filterRegistration.addMappingForUrlPatterns(null, false, "/*");
3.В файле SpringConfig.java в Bean методе templateResolver добавить строку:
templateResolver.setCharacterEncoding("UTF-8");
и в методе configureViewResolversдобавить строки:
resolver.setCharacterEncoding("UTF-8");
resolver.setContentType("text/html; charset=UTF-8");
После этого страницы должны отображаться корректно и данные в формах тоже.
@@clondayk спасибо
А как настроить подобный фильтр с помощью Spring Boot?
spring.mvc.hiddenmethod.filter.enabled=true
в проперти файл добавь
Всем привет.
Подскажите что делать вот с такой ошибкой:
HTTP Status 405 - Method Not Allowed
Type Status Report
Message Request method 'POST' not supported
Description The method received in the request-line is known by the origin server but not supported by the target resource.
Была такая же проблема. Сделал mvn clean -> перестало запускаться и выявилась другая проблема. Я не удалил файлы applicationContextMVC.xml и web.xml, а просто переименовал, оставил для истории. После того как удалил совсем указанные файлы, все заработало.
Тоже была такая проблема, даже после добавления фильтра. mvn clean помог
Тоже такую ошибку словил, поменял в edit.html PATCH на POST и соответственно PatchMapping на PostMapping в контроллере.
@@mgh2662 Мне тоже это помогло