SC24EP01 Разработка веб-приложения - Разработка проектов со Spring

แชร์
ฝัง
  • เผยแพร่เมื่อ 3 มี.ค. 2024
  • В первом ролике цикла я демонстрирую разработку классического веб-приложения со Spring WebMVC, Thymeleaf и Jakarta Bean Validation. В ролике демонстрируется несколько способов создания нового проекта на основе Spring Boot, вкратце описывается многоуровневая архитектура и шаблон проектирования MVC, создание базовых компонентов приложения, валидация данных и интернационализация. Кроме этого продемонстрировано несколько способов запуска приложения на основе Spring Boot.
    В цикле роликов "Разработка проектов со Spring" я рассказываю на простых примерах о процессе разработки веб-приложений и REST-сервисов на языке программирования Java с использованием экосистемы Spring. Данный цикл охватывает разработку классических и реактивных проектов, вопросы их сопровождения, такие как документация и мониторинг, адаптацию их к облачной инфраструктуре и процесс их развёртывания в Docker и Kubernetes.
    Репозиторий проекта: github.com/alex-kosarev/sc24/...
    Мои ресурсы:
    - Сайт: alexkosarev.name
    - Канал на TH-cam: / @shurik_codes
    - Канал в Telegram: t.me/+TZCuO38vG3oqu_Jq
    - Группа для обсуждений в Telegram: t.me/+UFAkw187WstX0wqy
    - Паблик в VK: shurik.codes
    - Канал в Дзене: dzen.ru/shurik_codes
    - Канал на Rutube: rutube.ru/channel/24432001/
    - Страница в Boosty: boosty.to/akosarev
    Поддержать проект:
    - Доны в VK: donut/shurik.codes
    - Донаты в Boosty: boosty.to/akosarev/donate
    - Через Tinkoff: www.tinkoff.ru/cf/4PEOiVCZQuS
    #java #spring #web #validation #thymeleaf #howto

ความคิดเห็น • 162

  • @BukaPuma
    @BukaPuma 6 วันที่ผ่านมา +1

    Давно учила Java core и очень боялась заходить в Spring. Спасибо, Александр, что помогли преодолеть страх перед новым направлением.

  • @matthew_-cf6qo
    @matthew_-cf6qo 4 หลายเดือนก่อน +12

    После всех других роликов по спринг - отбивались руки только. У вас же всё очень понятно и информативно, появилась вера в возможность освоения фреймворка😆. Буду продолжать смотреть ваш канал. Успехов вам!

  • @Devivl
    @Devivl 5 หลายเดือนก่อน +12

    Александр - потрясающий преподаватель. Всегда очень приятно смотреть и слушать. Спасибо, Саш, что ты делаешь.

    • @eugenz2334
      @eugenz2334 5 หลายเดือนก่อน +4

      Присоединяюсь, для меня тоже один из лучших преподавателей 🔥🔥

  • @luckytima2315
    @luckytima2315 5 หลายเดือนก่อน +7

    Братик вот хочешь верь или не верь, но то что ты делаешь это имба дикая !

  • @alexbern8656
    @alexbern8656 5 หลายเดือนก่อน +5

    было бы интересно, в будущем, увидеть ролики про проектирование приложения в гексагональной архитектуре)

  • @user-ss4nl3zb8v
    @user-ss4nl3zb8v 5 หลายเดือนก่อน +9

    Отличное видео.
    Главное, чтобы запал не пропал у человека.
    Хотелось бы про деплой на прод увидеть - как сервис выбрать, как залить, как запустить, какие особенности и т.д. - в общих чертах.
    Поддержу комментаторов выше- автор очень понятно и интересно объясняет.
    Спасибо! Жду следующие выпуски.

    • @alexandr6055
      @alexandr6055 5 หลายเดือนก่อน +2

      Не пропадет. Он уже отснял все 22 ролика, просто выкладывает поэтапно)

    • @user-ss4nl3zb8v
      @user-ss4nl3zb8v 5 หลายเดือนก่อน

      @@alexandr6055 да, спасибо, я увидел его вступительный ролик.
      Темы хорошие озвучивает, посмотрю все обязательно.

  • @MgsMen
    @MgsMen 5 หลายเดือนก่อน +4

    Ждал этот видос больше, чем выход второй Дюны !!

  • @svyatoiambrozii
    @svyatoiambrozii 3 หลายเดือนก่อน +3

    Очень хорошо, что вы стали записывать такие интересные ролики, которые не только зеленому новичку будут полезны. 🙂👍👍👍

  • @user-qo6wb7gu7n
    @user-qo6wb7gu7n 5 หลายเดือนก่อน +2

    Спасибо! ждем продолжения!

  • @nigma933
    @nigma933 4 หลายเดือนก่อน +1

    Спасибо вам огромное за урок!

  • @akalavan5395
    @akalavan5395 3 หลายเดือนก่อน +2

    Классный, полезный ролик без воды. Все полтора часа полезной информации. Хотелось бы по больше фишек, которые применяются в реальной разработки

  • @urantech
    @urantech 5 หลายเดือนก่อน +2

    Спасибо за контент!

  • @Admin-qw7ss
    @Admin-qw7ss 5 หลายเดือนก่อน +1

    Спасибо! Все крайне понятно

  • @user-yf2er5vr8q
    @user-yf2er5vr8q 5 หลายเดือนก่อน +2

    cпасибо большое вы как будто услышали наши пожелания

  • @maxnone2066
    @maxnone2066 5 หลายเดือนก่อน +2

    Огромное спасибо автору. Отличное видео!

  • @alexbern8656
    @alexbern8656 5 หลายเดือนก่อน +1

    как всегда хорошо, спасибо

  • @cheShireReal
    @cheShireReal หลายเดือนก่อน +1

    Огромное спасибо вам за работу 👍

  • @alekseizhitenev6020
    @alekseizhitenev6020 หลายเดือนก่อน +1

    спасибо) полезно и приятно слушать)

  • @pablik8387
    @pablik8387 5 หลายเดือนก่อน +1

    Спасибо за видос, как всегда кайфанул

  • @11kotikov
    @11kotikov 5 หลายเดือนก่อน +1

    Офигенно! Спасибо большое, еще и настолько подробно и понятно!

  • @o.sandman
    @o.sandman 4 หลายเดือนก่อน +2

    Супер! Смотрится на одном дыхании, как детективная история, чем дальше - тем интереснее

  • @Boraldan
    @Boraldan 5 หลายเดือนก่อน +2

    Интригующе.

  • @danil2590
    @danil2590 3 หลายเดือนก่อน +1

    Друг, хочу сказать тебе огромное спасибо. Очень тяжело найти свежие ролики, где всё досконально объясняют. Спасибо тебе огромное!

  • @user-bn9wc8db6s
    @user-bn9wc8db6s 5 หลายเดือนก่อน +3

    1,5 часа == ОГОНЬ!!! Спасибо , Александр!

  • @bondjigar
    @bondjigar หลายเดือนก่อน +1

    Огонь, смотрится круто и информативно. Спасибо!

  • @Hocorend
    @Hocorend 2 หลายเดือนก่อน +1

    Спасибо, самое то, что мне сейчас нужно

  • @boginalex8563
    @boginalex8563 2 หลายเดือนก่อน

    Александр спасибо за ваш труд, просто лучший.

  • @user-yk8zz3mw5y
    @user-yk8zz3mw5y 4 หลายเดือนก่อน +1

    Спасибо за то, что делитесь знаниями! Видео отличное, всё чётко и понятно)

  • @vadimkharovyuk7660
    @vadimkharovyuk7660 5 หลายเดือนก่อน +1

    большое спасибо _ побольше таких уроков +) лайк комент подписка

  • @alexer8442
    @alexer8442 5 หลายเดือนก่อน +3

    Давненько не видел!! Очень рад, что не забросил дело)))

  • @fedotfeda
    @fedotfeda 2 หลายเดือนก่อน +1

    Успехов Вам и спасибо за полезную информацию

  • @goodvideobro
    @goodvideobro 5 หลายเดือนก่อน +1

    Отличная серия роликов

  • @ArtFanRamm
    @ArtFanRamm 3 หลายเดือนก่อน +2

    Отличный контент Александр, продолжайте, не останавливайтесь) Ваши труды поддержал донатом, благодарю за уроки

  • @oleksandrhavryush9250
    @oleksandrhavryush9250 4 หลายเดือนก่อน +2

    Большое спасибо. Очень информативно. Как раз сейчас начинаю писать свою дипломную работу по Спрингу и очень рад, что вас нашел.

  • @DaOrNot
    @DaOrNot 4 หลายเดือนก่อน +2

    Опыта работы программистом не имею, только обучаюсь длительное время.
    С данного видео получил больше полезной инфы чем от всяких лекций и многих других видео с ютуба.
    Очень благодарен за труд, твои видео как клад, очень рад что наткнулся.

  • @artyomzolotoverkhov8468
    @artyomzolotoverkhov8468 2 หลายเดือนก่อน +1

    Класс, очень понятно и доступно, очень рад что нашел ваши видео вКонтакте, а теперь и здесь на канале! Однозначно подписка.

  • @user-hd7ix7hc9s
    @user-hd7ix7hc9s 5 หลายเดือนก่อน +1

    Это прекрасно! Мне как раз спринг освоить сильно захотелось день назад :)

  • @Boraldan
    @Boraldan 5 หลายเดือนก่อน +2

    Спасибо! Будем просвещаться )

  • @markostr
    @markostr 5 หลายเดือนก่อน +1

    Спасибо ! Но нужно еще раз пересмотреть и попробывать своими ручками. Мне очень понравилось

  • @spell3961
    @spell3961 5 หลายเดือนก่อน +2

    Спасибо Вам огромное!!!))))
    Очень информативно, понятно и интересно
    Лучший канал по Джаве))))

  • @denisthestudent
    @denisthestudent 2 หลายเดือนก่อน +2

    Спасибо за урок! Я недавно теорию по спрингу выучил, а тут практика годная с объяснением тонких моментов. Сохраняешь работягам кучу времени. Чисто кайф.
    P.S. Круто, что оставляешь моменты типа такого 1:26:51 было весело видеть твою реакцию на баг

  • @neyasbit
    @neyasbit 2 หลายเดือนก่อน +2

    Бомба 💣💣💣

  • @dmaberlin
    @dmaberlin 4 หลายเดือนก่อน +1

    это настоящий подарок :D

  • @qaisarbaltabay
    @qaisarbaltabay 5 หลายเดือนก่อน +2

    ждееем!!!!!

  • @duming3076
    @duming3076 3 หลายเดือนก่อน +1

    谢谢老师,你厉害得很

  • @Edu-wi3il
    @Edu-wi3il 5 หลายเดือนก่อน +2

    Спасибо! Было интересно узнать про валидацию данных и интернализацию, а также что можно аннотировать @ModelAttribute методы. Как предложение, можно было кратко описать спецсимволы HTML в ходе повествования, либо привести ссылку на документацию, а также добавить пример подключения статических ресурсов CSS и JS, все таки это распространенный кейс

    • @shurik_codes
      @shurik_codes  4 หลายเดือนก่อน

      Про валидацию уже был ролик на канале, про Thymeleaf будут

  • @peachack7903
    @peachack7903 4 หลายเดือนก่อน +1

    Огромное спасибо за труд! Было бы отлично добавить тайм-коды к видео:) Когда пытаюсь повторить на практике, часто возвращаюсь к разным частям разных уроков, пытаясь вспомнить где и что было рассказано и показано)

    • @shurik_codes
      @shurik_codes  4 หลายเดือนก่อน

      Таймкоды будут, не успел их проставить

  • @aleksey2793
    @aleksey2793 หลายเดือนก่อน

    6:00 - а есть ли у вас ролик про описание формата этих pom файлов? Например для чего зависимости в корневом файле? Интересна именно тема модулей, и если в части pom файлов самих модулей более менее понятно, то в части корневого есть вопросы

  • @viva8357
    @viva8357 5 หลายเดือนก่อน +2

    Классный материал. Очень насыщенный и наглядный! Александр, в начале ролика Вы упомянули, что будете разрабатывать многомодульный проект, и каждый модуль будет развернут как отдельный микросервис. Хотелось бы узнать почему выбран именно такой подход? Если за альтернативу взять вариант с разработкой каждого приложения в отдельном проекте, то какие плюсы и минусы будут в сравнении с выбранным Вами подходом?

    • @shurik_codes
      @shurik_codes  5 หลายเดือนก่อน

      Мне так проще всё держать в одном месте) В реальных условиях так не всегда удобно делать

  • @user-su1zq3ud8x
    @user-su1zq3ud8x 4 หลายเดือนก่อน

    Спасибо, что выпускаешь свои ролики, многие моменты из твоих роликов помогают улучшить мой код. Такой вопрос: Почему ты в подавляющей части роликов используешь систему сборки maven, а не gradle?

    • @shurik_codes
      @shurik_codes  4 หลายเดือนก่อน +2

      Я использую во всех роликах maven, потому что привык)

  • @romanovichihin2429
    @romanovichihin2429 2 หลายเดือนก่อน +1

    коммент для продвижения

  • @DimaJigalov
    @DimaJigalov 4 หลายเดือนก่อน

    Простите, а чем обусловлен выбор Linked List в качестве структуры данных для продуктов в ин мемори репо?

  • @user-rv9ss5ce7z
    @user-rv9ss5ce7z 5 หลายเดือนก่อน +2

    велосипед не изобрел но под пивасик нормас!

  • @user-ux1cn3jx5w
    @user-ux1cn3jx5w หลายเดือนก่อน +1

    Замечательный материал. Огромное спасибо!
    почему Вы не настраивали диспатчер сервлет для шаблонизатора что бы указывать откуда брать шаблоны? Это делает Spring boot сам из коробки ?

    • @shurik_codes
      @shurik_codes  หลายเดือนก่อน

      да, в Spring Boot это уже сконфигурировано

  • @olgapro2640
    @olgapro2640 4 หลายเดือนก่อน +1

    Здравствуйте, у вас в плейлисте перепутаны первый и второй ролики

  • @t0tom427
    @t0tom427 4 หลายเดือนก่อน

    Спасибо за видео, повторял сейчас за вами все и столкнулся с ошибкой что форма вела на /catalogue/products/catalogue/products/create, изменил data-th-action="@{/catalogue/products/create}" на data-th-action="@{create}" и все заработало, форма перенаправляет куда надо. Интересно с чем связано такое поведение🤔

  • @user-007-1
    @user-007-1 5 หลายเดือนก่อน +1

    Используете ли инструменты ИИ для помощи с написанием кода, и с генерацией тестов?

    • @shurik_codes
      @shurik_codes  5 หลายเดือนก่อน +1

      Нет, всё пишу сам

  • @rainrainov4495
    @rainrainov4495 4 หลายเดือนก่อน +1

    Добрый день! Что бы вы посоветовали использовать для интеграционного тестирования MockMvc, TestRestTemplate, WebTestClient, RestAssure возможно другой вариант. Для работы с WebTestClient обязательно добавлять webflux или в последних версиях Spring можно настроить и без webflux?

    • @shurik_codes
      @shurik_codes  4 หลายเดือนก่อน

      По тесты будут 5 и 10 ролики, RestAssured выглядит перспективнее всех за счёт универсальности, но я использую либо MockMvc, либо WebTestClient. Да, для последнего нужен webflux

  • @user-lm1sm2ek3h
    @user-lm1sm2ek3h 5 หลายเดือนก่อน +1

    Спасибо за отличный контент!
    А что за расширение, которое показывает simple (0%) и что оно вообще делает?

    • @shurik_codes
      @shurik_codes  5 หลายเดือนก่อน +2

      Code complexity

  • @alexandr6055
    @alexandr6055 5 หลายเดือนก่อน +1

    скажите, а для чего при обращении в методах к сервисам или репозиториям которые инжектированы внутри класса вы используете конструкцию this.servise...? Что даёт здесь этот this?

    • @shurik_codes
      @shurik_codes  5 หลายเดือนก่อน +1

      для собственного удобства, чтобы видеть, что обращение идёт к свойству экземпляра класса, а не к локальной переменной

  • @user-pq9zz8gs4s
    @user-pq9zz8gs4s หลายเดือนก่อน

    Всё здорово, всё полезно, но почему ты не показал с нуля как создавать много модульный проект, я не понял

  • @kxeklom
    @kxeklom 5 หลายเดือนก่อน

    21:48
    Присоединяюсь к комментариям ниже, действительно, смотреть ваши уроки одно удовольствие. Но у меня один вопрос. Почему мы помечаем стереотипными аннотациями саму реализацию интерфейса, а не сам интерфейс. Пометив аннотацией реализацию интерфейса, Spring создаст бины классов реализующих его?

    • @shurik_codes
      @shurik_codes  5 หลายเดือนก่อน +2

      1. Если я ничего не путаю, то применение стереотипичных аннотаций к интерфейсам не регистрирует соответствующие компоненты в контексте приложения, а это ведёт к возникновению NoSuchBeanDefinitionException при попытке внедрения.
      2. При таком подходе интерфейс в какой-то мере становится зависимым от Spring, а я стараюсь делать интерфейсы независимыми, не смотря на всю свою любовь к Spring.
      Но вообще я на практике из стереотипных аннотаций использую только @Controller, остальные компоненты я предпочитаю конфигурировать руками в @Configuration/@Bean.

  • @viewer_evgeniy
    @viewer_evgeniy 4 หลายเดือนก่อน

    Здравствуйте! Спасибо за ваши видео. Подскажите пожалуйста, в чем разница между аннотацией @ModelAttribute и использованием модели в качестве параметра и соответственно добавлением атрибутов с помощью метода addAttribute.

    • @shurik_codes
      @shurik_codes  4 หลายเดือนก่อน +1

      Оба данных подхода реализуют одно и то же действие - добавление атрибута в модель. @ModelAttribute позволяет написать метод, добавляющий атрибут в модель для всех запросов, обрабатываемых в контроллере. По сути уменьшается дублирование кода.

  • @dmitrelkin9256
    @dmitrelkin9256 5 หลายเดือนก่อน +2

    Александр, вопрос: можно чуть подробней - для чего нужно что бы при компиляции сохранялись наименования аргументов методов? (об говорится в 20:00 по шкале времени)

    • @shurik_codes
      @shurik_codes  5 หลายเดือนก่อน +4

      Чтобы не уточнять в @PathVariable, @RequestParam и других аналогичных аннотациях названия переменных. Например, если скомпилировать без сохранением названия аргументов такой код:
      @RequestMapping("/path/with/{variable}")
      String doSomething(@PathVariable String variable)
      то аргумент в рантайме будет называться arg0 (вроде), и при вызове метода будет выброшено исключение, т.к. в пути нет {arg0}

    • @dmitrelkin9256
      @dmitrelkin9256 5 หลายเดือนก่อน

      @@shurik_codes Спасибо! вот такие объяснения очень ценны для чайников!

  • @denisskyter4526
    @denisskyter4526 5 หลายเดือนก่อน +4

    А будет запись стрима... Я в школе просто буду

    • @shurik_codes
      @shurik_codes  5 หลายเดือนก่อน +3

      Это не стрим, а премьера видео, так что да, будет

  • @user-gu1sv3ct4f
    @user-gu1sv3ct4f 2 หลายเดือนก่อน

    Здравствуйте, спасибо за видео, подскажите, зачем делать 2 pom.xml файла?

    • @shurik_codes
      @shurik_codes  2 หลายเดือนก่อน

      Каждый pom-файл отвечает за отдельный модуль, корневой - за весь проект в целом

  • @rus-to1ht
    @rus-to1ht 4 หลายเดือนก่อน

    Подскажите, пожалуйста, каким образом payload в методе createProduct() автоматически получил данные из формы. Разве мы не должны прописывать th:object в form, чтобы это работало?

    • @shurik_codes
      @shurik_codes  4 หลายเดือนก่อน

      Если метод аннотированного контроллера принимает аргумент какого-то собственного типа, то это равносильно объявлению его с аннотацией @ModelAttribute, подробнее вот тут в самом конце: docs.spring.io/spring-framework/reference/web/webmvc/mvc-controller/ann-methods/arguments.html
      По сути создаётся экземпляр указанного класса и в него подставляются данные из запроса.

    • @rus-to1ht
      @rus-to1ht 4 หลายเดือนก่อน

      Большое спасибо за разъяснение!@@shurik_codes

  • @69ultrapotato
    @69ultrapotato 5 หลายเดือนก่อน +1

    Посмотрел код в гитхабе. И мне показалось, что конечная задумка будет что-то вроде книги spring microservices in action. Я правильно понимаю?

    • @shurik_codes
      @shurik_codes  5 หลายเดือนก่อน +3

      Я из этой книги взял кусок про Spring Cloud и Helm, остальное - авторское) Ну и если буду переснимать в будущем цикл, то Spring Cloud будет фундаментально переписан

    • @69ultrapotato
      @69ultrapotato 5 หลายเดือนก่อน

      @@shurik_codes Круто, спасибо.

  • @denisskyter4526
    @denisskyter4526 5 หลายเดือนก่อน +2

    А если spring под капотом работает в многопотоке, то надо все синхронизировать и использовать потокобезопасные структуры данных?

    • @shurik_codes
      @shurik_codes  5 หลายเดือนก่อน +1

      Да, и это касается не только Spring, но и вообще всех многопользовательских систем

    • @denisskyter4526
      @denisskyter4526 5 หลายเดือนก่อน

      @@shurik_codes а синхронизировать нужно только структуры данных или еще много чего

  • @ladamira3477
    @ladamira3477 4 หลายเดือนก่อน +1

    Александр. Спасибо за уроки. у меня вопрос. Я совсем начинающая. у меня версия maven 3.9.4 и spring-boot-maven-plugin у меня красный и никак не хочет добавляться. что делать? поставить вашу версию maven поможет?

    • @shurik_codes
      @shurik_codes  4 หลายเดือนก่อน +1

      1. Если версия плагина не указана через pluginManagement в текущем или родительском проекте, то её нужно указать явно
      2. groupId должна быть org.springframework.boot, artifactId - spring-boot-maven-plugin
      Если даже после этого плагин выделен красным и речь идёт об IDEA, то нужно чистить кеш

    • @ladamira3477
      @ladamira3477 4 หลายเดือนก่อน

      @@shurik_codes я там в каком-то уроке сделала обертку для maven. теперь не знаю как её убрать
      и еще когда создается проект через сайт. то главный модуль уже получается дочерний от spring-boot и модуль у меня не добавляется. только директория manager-app

  • @viewer_evgeniy
    @viewer_evgeniy 3 หลายเดือนก่อน

    А подскажите, как вообще создавать такие многомодульные проекты в intellij? У вас в selmage-parent нет src и вложенных в него папок. Я когда пытаюсь создать пустой "родительский" maven проект, то у меня все равно эта папка появляется. Или вы просто вручную из parent их удаляете?

    • @shurik_codes
      @shurik_codes  3 หลายเดือนก่อน

      Я создаю обычный maven-проект и удаляю src

  • @kxeklom
    @kxeklom 4 หลายเดือนก่อน

    Можно ли вместо Integer использовать класс UUID, вместо обозначения для поля id?

    • @shurik_codes
      @shurik_codes  4 หลายเดือนก่อน

      Конечно можно

  • @9-260
    @9-260 4 หลายเดือนก่อน

    Спасибо за видео!
    Но у меня в процессе просмотра возникло пару вопросов:
    1. 23:30 А если у меня две реализации ProductService как спринг будет выбирать екземпляр.
    2. Почему вы синхронизировали список через Collections а не пакет concurrency.
    3. 40:37 Можно ли было написать product.setId(products.size() + 1);?
    4. Что за магия происходит с @PostMapping("create") public String createProduct(NewProductPayload payload)
    Как класс NewProductPayload собирается над ним даже аннотаций не стоит, как это работает?
    5. Почему метод updateProduct в DefaultProductService мы реализовали так как реализовали, а не как до этого вызвали бы метод у productRepository?

    • @shurik_codes
      @shurik_codes  4 หลายเดือนก่อน

      1. @Qualifier или @Order/@Priority
      2. Первое, что в голову пришло
      3. Тогда возможно появление в разных промежутках времени разных товаров с одним идентификатором, но опять же это не играет большой роли
      4. Объясняется вот тут в самом конце: docs.spring.io/spring-framework/reference/web/webmvc/mvc-controller/ann-methods/arguments.html По сути логика аналогична применению @ModelAttribute к аргументу NewProductPayload payload
      5. Не понял вопроса

  • @user-wm5xb5zo1s
    @user-wm5xb5zo1s 4 หลายเดือนก่อน

    Интересно конечно на java делать веб-приложения, но на Golang будет выглядеть намного проще и быстрее

    • @shurik_codes
      @shurik_codes  4 หลายเดือนก่อน +1

      Показываю, что знаю и умею

  • @LuchkinDS
    @LuchkinDS 4 หลายเดือนก่อน

    как-то можно сопоставить разные имена из формы и атрибуты payload?

    • @shurik_codes
      @shurik_codes  4 หลายเดือนก่อน

      Да, при помощи методов с аннотацией @InitBinder

  • @user-fr2dw3qd4v
    @user-fr2dw3qd4v 4 หลายเดือนก่อน

    Если помню Вы где-то хотели в процессе видео объяснить, почему нужно обертку инта использовать вместо примитива, но так и не вернулись к этому. Если, конечно, я не пропустил.

    • @shurik_codes
      @shurik_codes  4 หลายเดือนก่อน

      Ну вот как-то да, упустил этот момент. Это нужно, чтобы в 3 ролике корректно работал JPA)

  • @user-007-1
    @user-007-1 5 หลายเดือนก่อน +2

    Планируете ли делать разбор работы с хибернейтом?
    От вас бы было классно посмотреть

    • @shurik_codes
      @shurik_codes  5 หลายเดือนก่อน +2

      Будет

    • @scalar3513
      @scalar3513 4 หลายเดือนก่อน

      ​@@shurik_codes
      🎉🎉🎉🎉

    • @scalar3513
      @scalar3513 4 หลายเดือนก่อน

      🔥🔥🔥🔥@@shurik_codes

  • @mahotinigor
    @mahotinigor 5 หลายเดือนก่อน

    А вы пользуетесь Jpa buddy ?

    • @shurik_codes
      @shurik_codes  5 หลายเดือนก่อน

      Нет, я на практике с JPA вообще редко сталкиваюсь

  • @partiec6065
    @partiec6065 2 หลายเดือนก่อน

    Как напечатать перечеркнутое равно? Перебрал все: ≠, ≠, U+2260, !=, (ne), ne, =!, , !==, Alt+8800. Не печатается.
    Спасибо проклятому автору за действительно крутое и полезное видео и будь он проклят. Добавь крипту для доната.

    • @shurik_codes
      @shurik_codes  2 หลายเดือนก่อน +1

      Нужно включить поддержку лигатур в настройках шрифта, если речь об IDEA

  • @dmytro0228
    @dmytro0228 4 หลายเดือนก่อน

    А что делать есть у меня .jar файл собирается, но после команды java -jar name.jar ничего не происходит? И соответственно localhost ничего не возвращает в браузере. Все остальные способы работают нормально.

    • @shurik_codes
      @shurik_codes  4 หลายเดือนก่อน

      Возможно, jar собран либо без Spring Boot Maven Plugin, либо он не "толстый".

    • @dmytro0228
      @dmytro0228 4 หลายเดือนก่อน

      @@shurik_codes спасибо большое

  • @user-oy1kl1vx8q
    @user-oy1kl1vx8q 4 วันที่ผ่านมา

    Спасибо большое за Ваш труд. Возник вопрос, в связи с последними событиями в РФ ютуб стал не надежным. На других площадках не рассматриваете возможность размещения? Не хотелось бы утром встать а доступ закрыт...

    • @shurik_codes
      @shurik_codes  4 วันที่ผ่านมา

      Внимательно смотрим на описание под видео и вкладку "Сообщество". Все ролики продублированы на площадках VK, Дзен, Rutube и Boosty

    • @user-oy1kl1vx8q
      @user-oy1kl1vx8q 3 วันที่ผ่านมา

      Благодарю, почему то пропустил это

  • @vnazarenko
    @vnazarenko หลายเดือนก่อน

    Александр, добрый день.
    А можно в двух словах про интерполяцию строк на 46:32? Что это, с чем едят - хотя бы какой-нибудь шортс. Либо подскажите что загуглить, а то я поискал и что-то всё не то находится. Спасибо.

    • @shurik_codes
      @shurik_codes  หลายเดือนก่อน

      Инлайнинг, оговорился
      alexkosarev.name/2017/08/08/thymeleaf-template-engine/ www.thymeleaf.org/doc/tutorials/3.1/usingthymeleaf.html#inlining

    • @vnazarenko
      @vnazarenko หลายเดือนก่อน

      @@shurik_codes Спасибо!

  • @alexandersmidt9984
    @alexandersmidt9984 3 หลายเดือนก่อน

    На каком сайте? Ваш сайт почему то не работает(

    • @shurik_codes
      @shurik_codes  2 หลายเดือนก่อน

      alexkosarev.name, в теории он может быть недоступен из-за пределов РФ

  • @cubuanic
    @cubuanic 4 หลายเดือนก่อน

    На 50:05 - там же PostMapping должен быть, разве нет?...
    А то получается два одинаковых GetMapping-а

    • @cubuanic
      @cubuanic 4 หลายเดือนก่อน

      А....
      Там не PostMapping
      Там должен был быть GetMapping, но на другой урл - в одном "{\\d+}", а во втором - "{\\d+}/edit"

  • @dmitriyobidin6049
    @dmitriyobidin6049 5 หลายเดือนก่อน

    Народ, где сейчас больше денег можно заработать на сеньорной позиции в срденем, golang или java?

    • @shurik_codes
      @shurik_codes  5 หลายเดือนก่อน

      В среднем - на Go

  • @whereamibluesky3554
    @whereamibluesky3554 3 หลายเดือนก่อน

    можно было обойтись без класса NewProductPayload, сразу создавая Product?

    • @shurik_codes
      @shurik_codes  2 หลายเดือนก่อน

      Теоретически - да, ничто не мешает так делать, но с точки зрения архитектуры это плохая идея. Структуры данных должны соответствовать намерениям и нести только тот набор свойств, которые могут быть заполнены пользователем.

  • @dmaberlin
    @dmaberlin 2 หลายเดือนก่อน

    как добавить локали на другие языки сразу же?

    • @shurik_codes
      @shurik_codes  2 หลายเดือนก่อน

      Создавать соответствующие файлы интернационализации

  • @3am6ep
    @3am6ep 2 หลายเดือนก่อน

    Очень полезное видео.
    Только вот если в валидации я убираю аннотацию Size, оставляя только NotNull, то могу создавать объекты без названий
    Импорты все из одного пакета(

    • @shurik_codes
      @shurik_codes  2 หลายเดือนก่อน

      Всё логично

    • @3am6ep
      @3am6ep หลายเดือนก่อน

      @@shurik_codes Я думал NotNull для того чтобы мы не могли сохранить значение вообще без символов, но видимо я не правильно понимаю(

    • @shurik_codes
      @shurik_codes  หลายเดือนก่อน

      @@3am6ep @NotNull только для проверки на null

  • @denisskyter4526
    @denisskyter4526 5 หลายเดือนก่อน +1

    Я так понял таких роликов будет много , да?

    • @shurik_codes
      @shurik_codes  5 หลายเดือนก่อน

      Да, всего в цикле будет 22 ролика, полный список роликов я публиковал у себя в Telegram-канале и во вступительном ролике

  • @yoxaron
    @yoxaron 26 วันที่ผ่านมา

    А зачем везде писать this, если нет конфликтов имён?

    • @shurik_codes
      @shurik_codes  26 วันที่ผ่านมา

      Привычка, чтобы сразу было видно, где идёт обращение к свойствам класса, а где - к локальным переменным

  • @user-hm3zr4vf4o
    @user-hm3zr4vf4o 7 วันที่ผ่านมา

    Я ведь правильно понял, что NewProductPayload это DTO?

  • @alexandr6055
    @alexandr6055 5 หลายเดือนก่อน +3

    Вау, спринг мвс с таймлифом в 2024 году?!😂 Надеюсь там и jsp будет?

    • @shurik_codes
      @shurik_codes  5 หลายเดือนก่อน +2

      А почему нет? Оно всё вполне актуальное

    • @hackim2554
      @hackim2554 5 หลายเดือนก่อน +2

      Так это же плейлист по основам, так что стоило ожидать. Тем более сам создатель канала опубликовал объявления об этой серии видео

    • @69ultrapotato
      @69ultrapotato 5 หลายเดือนก่อน

      @@shurik_codes Актуальное может быть, но таймлиф и вообще шаблонизаторы - редко применимы в проде, только для специфических задач. Хотя похоже вы не захотели отвлекаться на spa-js-фреймворки. А спринг мвс типа не модный, в отличии от вебфлакса. Хотя на нем большинство даже новых сервисов пишут, потому что настоящая потребность в реактивных сервисах редка.

    • @tusman4ik
      @tusman4ik 5 หลายเดือนก่อน

      Почему нет? Новичкам очень важно потрогать то, что они пишут, превратить их работы в реальный продукт. Не думаю, что js с 0 учить для такой цели рационально)

  • @087773016049
    @087773016049 5 หลายเดือนก่อน +2

    Саша, привет. Спасибо, контент очень качественно подан. Но у меня вопрос. Зачем это нужно с практической точки зрения? Ведь же мы уже давно на бэке работаем с JSON, который прилетает с фронта. Я про шаблонизатор Thymeleaf. Спасибо заранее за ответ.

    • @shurik_codes
      @shurik_codes  5 หลายเดือนก่อน +1

      Ну, как показывает практика, серверный рендеринг вполне активно используется, недаром он присутствует в том числе и в Angular, Vue и React

    • @087773016049
      @087773016049 5 หลายเดือนก่อน

      @@shurik_codes Я к тому, что напрямую мы не используем thymeleaf или еще что, например jsp, на бэке. В практике реальной это не пригодится сейчас. Все очень стремительно меняется в наше время.

  • @LuchkinDS
    @LuchkinDS 4 หลายเดือนก่อน

    product.setId(products.size() + 1);

    • @shurik_codes
      @shurik_codes  4 หลายเดือนก่อน

      Можно и так, только в случае удаления товара не из конца списка возможно дублирование идентификаторов

  • @dmaberlin
    @dmaberlin 4 หลายเดือนก่อน

    12:31:49.908 [restartedMain] ERROR org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter --
    ***************************
    APPLICATION FAILED TO START
    ***************************
    Description:
    No spring.config.import property has been defined
    Action:
    Add a spring.config.import=configserver: property to your configuration.
    If configuration is not required add spring.config.import=optional:configserver: instead.
    To disable this check, set spring.cloud.config.enabled=false or
    spring.cloud.config.import-check.enabled=false.

    • @shurik_codes
      @shurik_codes  4 หลายเดือนก่อน

      К этому ролику код с тэгом sc24ep01

  • @yasha64000
    @yasha64000 4 หลายเดือนก่อน +2

    у меня @NotNull игнорировал и не выводил ошибку, если поле пустое. Поставил @NotEmpty

    • @shurik_codes
      @shurik_codes  4 หลายเดือนก่อน

      @NotNull только проверяет на null, @NotEmpty проверяет, что строка состоит из 1+ символов