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

Поделиться
HTML-код
  • Опубликовано: 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
    - Канал на RUclips: / @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

Комментарии • 147

  • @alekseizhitenev6020
    @alekseizhitenev6020 День назад +1

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

  • @Devivl
    @Devivl 3 месяца назад +12

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

    • @eugenz2334
      @eugenz2334 3 месяца назад +4

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

  • @luckytima2315
    @luckytima2315 3 месяца назад +7

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

  • @matthew_-cf6qo
    @matthew_-cf6qo 2 месяца назад +8

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

  • @denisthestudent
    @denisthestudent Месяц назад +2

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

  • @alexbern8656
    @alexbern8656 3 месяца назад +5

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

  • @MgsMen
    @MgsMen 3 месяца назад +4

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

  • @Admin-qw7ss
    @Admin-qw7ss 3 месяца назад +1

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

  • @user-ss4nl3zb8v
    @user-ss4nl3zb8v 3 месяца назад +9

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

    • @alexandr6055
      @alexandr6055 3 месяца назад +2

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

    • @user-ss4nl3zb8v
      @user-ss4nl3zb8v 3 месяца назад

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

  • @alexbern8656
    @alexbern8656 3 месяца назад +1

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

  • @pablik8387
    @pablik8387 3 месяца назад +1

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

  • @user-xk4pl1sr9l
    @user-xk4pl1sr9l 3 месяца назад +2

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

  • @nigma933
    @nigma933 3 месяца назад +1

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

  • @neyasbit
    @neyasbit Месяц назад +2

    Бомба 💣💣💣

  • @maxnone2066
    @maxnone2066 3 месяца назад +2

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

  • @user-qo6wb7gu7n
    @user-qo6wb7gu7n 3 месяца назад +2

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

  • @Boraldan
    @Boraldan 3 месяца назад +2

    Интригующе.

  • @11kotikov
    @11kotikov 3 месяца назад +1

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

  • @user-yf2er5vr8q
    @user-yf2er5vr8q 3 месяца назад +2

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

  • @svyatoiambrozii
    @svyatoiambrozii 2 месяца назад +3

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

  • @Boraldan
    @Boraldan 3 месяца назад +2

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

  • @user-bn9wc8db6s
    @user-bn9wc8db6s 3 месяца назад +3

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

  • @vadimkharovyuk7660
    @vadimkharovyuk7660 3 месяца назад +1

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

  • @Hocorend
    @Hocorend Месяц назад +1

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

  • @user-yk8zz3mw5y
    @user-yk8zz3mw5y 3 месяца назад +1

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

  • @alexer8442
    @alexer8442 3 месяца назад +3

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

  • @user-hd7ix7hc9s
    @user-hd7ix7hc9s 3 месяца назад +1

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

  • @user-ib7vx3yc4i
    @user-ib7vx3yc4i 3 месяца назад +1

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

  • @oleksandrhavryush9250
    @oleksandrhavryush9250 2 месяца назад +2

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

  • @user-cm4jg9on2j
    @user-cm4jg9on2j 3 месяца назад +2

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

  • @spell3961
    @spell3961 3 месяца назад +2

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

  • @akalavan5395
    @akalavan5395 2 месяца назад +2

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

  • @fedotfeda
    @fedotfeda 19 дней назад +1

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

  • @markostr
    @markostr 3 месяца назад +1

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

  • @artyomzolotoverkhov8468
    @artyomzolotoverkhov8468 Месяц назад +1

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

  • @boginalex8563
    @boginalex8563 11 дней назад

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

  • @dmaberlin
    @dmaberlin 3 месяца назад +1

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

  • @ArtFanRamm
    @ArtFanRamm 2 месяца назад +2

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

  • @DaOrNot
    @DaOrNot 2 месяца назад +2

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

  • @danil2590
    @danil2590 Месяц назад +1

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

  • @qaisarbaltabay
    @qaisarbaltabay 3 месяца назад +2

    ждееем!!!!!

  • @peachack7903
    @peachack7903 3 месяца назад +1

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

    • @shurik_codes
      @shurik_codes  3 месяца назад

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

  • @duming3076
    @duming3076 Месяц назад +1

    谢谢老师,你厉害得很

  • @Edu-wi3il
    @Edu-wi3il 3 месяца назад +2

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

    • @shurik_codes
      @shurik_codes  2 месяца назад

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

  • @romanovichihin2429
    @romanovichihin2429 Месяц назад +1

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

  • @user-rv9ss5ce7z
    @user-rv9ss5ce7z 3 месяца назад +2

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

  • @viva8357
    @viva8357 3 месяца назад +2

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

    • @shurik_codes
      @shurik_codes  3 месяца назад

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

  • @user-su1zq3ud8x
    @user-su1zq3ud8x 3 месяца назад

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

    • @shurik_codes
      @shurik_codes  3 месяца назад +2

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

  • @DimaJigalov
    @DimaJigalov 2 месяца назад

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

  • @t0tom427
    @t0tom427 3 месяца назад

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

  • @user-lm1sm2ek3h
    @user-lm1sm2ek3h 3 месяца назад +1

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

  • @olgapro2640
    @olgapro2640 3 месяца назад +1

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

  • @user-007-1
    @user-007-1 3 месяца назад +1

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

    • @shurik_codes
      @shurik_codes  3 месяца назад +1

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

  • @rainrainov4495
    @rainrainov4495 3 месяца назад +1

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

    • @shurik_codes
      @shurik_codes  3 месяца назад

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

  • @dmitrelkin9256
    @dmitrelkin9256 3 месяца назад +2

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

    • @shurik_codes
      @shurik_codes  3 месяца назад +4

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

    • @dmitrelkin9256
      @dmitrelkin9256 3 месяца назад

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

  • @alexandr6055
    @alexandr6055 3 месяца назад +1

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

    • @shurik_codes
      @shurik_codes  3 месяца назад +1

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

  • @viewer_evgeniy
    @viewer_evgeniy 2 месяца назад

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

    • @shurik_codes
      @shurik_codes  2 месяца назад +1

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

  • @user-007-1
    @user-007-1 3 месяца назад +2

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

    • @shurik_codes
      @shurik_codes  3 месяца назад +2

      Будет

    • @scalar3513
      @scalar3513 3 месяца назад

      ​@@shurik_codes
      🎉🎉🎉🎉

    • @scalar3513
      @scalar3513 3 месяца назад

      🔥🔥🔥🔥@@shurik_codes

  • @69ultrapotato
    @69ultrapotato 3 месяца назад +1

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

    • @shurik_codes
      @shurik_codes  3 месяца назад +3

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

    • @69ultrapotato
      @69ultrapotato 3 месяца назад

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

  • @denisskyter4526
    @denisskyter4526 3 месяца назад +2

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

    • @shurik_codes
      @shurik_codes  3 месяца назад +1

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

    • @denisskyter4526
      @denisskyter4526 3 месяца назад

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

  • @denisskyter4526
    @denisskyter4526 3 месяца назад +4

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

    • @shurik_codes
      @shurik_codes  3 месяца назад +3

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

  • @partiec6065
    @partiec6065 17 дней назад

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

    • @shurik_codes
      @shurik_codes  15 дней назад +1

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

  • @user-wm5xb5zo1s
    @user-wm5xb5zo1s 2 месяца назад

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

    • @shurik_codes
      @shurik_codes  2 месяца назад +1

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

  • @user-gu1sv3ct4f
    @user-gu1sv3ct4f 23 дня назад

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

    • @shurik_codes
      @shurik_codes  21 день назад

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

  • @kxeklom
    @kxeklom 3 месяца назад

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

    • @shurik_codes
      @shurik_codes  3 месяца назад +2

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

  • @9-260
    @9-260 2 месяца назад

    Спасибо за видео!
    Но у меня в процессе просмотра возникло пару вопросов:
    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  2 месяца назад

      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. Не понял вопроса

  • @rus-to1ht
    @rus-to1ht 3 месяца назад

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

    • @shurik_codes
      @shurik_codes  3 месяца назад

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

    • @rus-to1ht
      @rus-to1ht 3 месяца назад

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

  • @ladamira3477
    @ladamira3477 3 месяца назад +1

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

    • @shurik_codes
      @shurik_codes  3 месяца назад +1

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

    • @ladamira3477
      @ladamira3477 3 месяца назад

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

  • @kxeklom
    @kxeklom 3 месяца назад

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

  • @user-fr2dw3qd4v
    @user-fr2dw3qd4v 3 месяца назад

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

    • @shurik_codes
      @shurik_codes  3 месяца назад

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

  • @cubuanic
    @cubuanic 2 месяца назад

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

    • @cubuanic
      @cubuanic 2 месяца назад

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

  • @LuchkinDS
    @LuchkinDS 2 месяца назад

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

    • @shurik_codes
      @shurik_codes  2 месяца назад

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

  • @mahotinigor
    @mahotinigor 3 месяца назад

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

    • @shurik_codes
      @shurik_codes  3 месяца назад

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

  • @3am6ep
    @3am6ep 11 дней назад

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

    • @shurik_codes
      @shurik_codes  11 дней назад

      Всё логично

    • @3am6ep
      @3am6ep 10 дней назад

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

    • @shurik_codes
      @shurik_codes  9 дней назад

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

  • @dmytro0228
    @dmytro0228 3 месяца назад

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

    • @shurik_codes
      @shurik_codes  2 месяца назад

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

    • @dmytro0228
      @dmytro0228 2 месяца назад

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

  • @viewer_evgeniy
    @viewer_evgeniy Месяц назад

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

    • @shurik_codes
      @shurik_codes  Месяц назад

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

  • @dmitriyobidin6049
    @dmitriyobidin6049 3 месяца назад

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

  • @denisskyter4526
    @denisskyter4526 3 месяца назад +1

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

    • @shurik_codes
      @shurik_codes  3 месяца назад

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

  • @whereamibluesky3554
    @whereamibluesky3554 Месяц назад

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

    • @shurik_codes
      @shurik_codes  Месяц назад

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

  • @user-ub5yg5sf6z
    @user-ub5yg5sf6z Месяц назад

    А почему для Id используется тип Integer?

    • @shurik_codes
      @shurik_codes  Месяц назад

      Чтобы ничего не переделывать для третьего ролика

  • @dmaberlin
    @dmaberlin 23 дня назад

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

    • @shurik_codes
      @shurik_codes  23 дня назад

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

  • @alexandersmidt9984
    @alexandersmidt9984 Месяц назад

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

    • @shurik_codes
      @shurik_codes  Месяц назад

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

  • @alexandr6055
    @alexandr6055 3 месяца назад +3

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

    • @shurik_codes
      @shurik_codes  3 месяца назад +2

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

    • @hackim2554
      @hackim2554 3 месяца назад +2

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

    • @69ultrapotato
      @69ultrapotato 3 месяца назад

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

    • @tusman4ik
      @tusman4ik 3 месяца назад

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

  • @087773016049
    @087773016049 3 месяца назад +2

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

    • @shurik_codes
      @shurik_codes  3 месяца назад +1

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

    • @087773016049
      @087773016049 3 месяца назад

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

  • @LuchkinDS
    @LuchkinDS 2 месяца назад

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

    • @shurik_codes
      @shurik_codes  2 месяца назад

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

  • @dmaberlin
    @dmaberlin 3 месяца назад

    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  3 месяца назад

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

  • @yasha64000
    @yasha64000 2 месяца назад +2

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

    • @shurik_codes
      @shurik_codes  2 месяца назад

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