Подключаем базу данных, настраиваем Jackson. Spring Boot REST

Поділитися
Вставка
  • Опубліковано 11 лип 2018
  • Spring Boot Rest Application: Добавляем базу данных в приложение с использованием JPA (по умолчанию провайдер - Hibernate). Также мы будем использовать для сериализации объектов библиотеку Spring по-умолчанию - Jackson.
    Код из видео:
    github.com/drucoder/sarafan/t...
    В предыдущих видео мы уже производили настройку JPA в спринг, по этой ссылке можно ознакомиться подробнее:
    • Spring Boot JPA (Hiber...
    Прежде всего нам нужно подключить зависимости на Spring Boot Data JPA и Postgres JDBC драйвер.
    Зависимости для файла build.gradle:
    gist.github.com/drucoder/59c7...
    После чего мы создаём доменный объект Message.
    Для уменьшения количества кода в проекте, мы будем использвать библиотеку lombok.
    Видео с подробным обзором проекта lombok:
    • Java Tools: Project Lo...
    К сожалению, использовать его в полной мере не получится из-за проблем совместимости lombok и jackson вызванных адаптацией этих фреймворков для работы с java 9.
    Настройка проперти для Postgres, исключающая ошибку в логах при старте приложения:
    gist.github.com/drucoder/5bd2...
    Для сокрытия лишних полей из одной сущности в разных запросах, мы будем использовать JsonView из Jackson - достаточно гибкий и мощный инструмент управления сериализуемыми данными
    Скрипты для асинхронных запросов из консоли:
    gist.github.com/drucoder/a1d8...
    ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
    ➡ Твиттер: / letscodedru
    ➡ Чат в Discord: / discord
    ➡ Группа Вконтакте: letscodedru
    ➡ Канал в Telegram: t.me/letsCode_dru
    ➡ Чат в Telegram: t.me/joinchat/FeiP9xEhqHajfqh...
    ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
    Поддержать проект:
    ➡ Patreon / letscodedru
    ➡ Яндекс.Деньги money.yandex.ru/to/4100145167...
    ➡ PayPal paypal.me/letscodedru
    ➡ Qiwi qiwi.me/letscode
    ➡ WebMoney/BitCoin funding.webmoney.ru/d/drucoder
    ➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖
    ➡ Ссылка на канал: / @letscodedru
    ➡ Ссылка на Яндекс.Дзен: zen.yandex.ru/media/id/5ac209...
  • Наука та технологія

КОМЕНТАРІ • 102

  • @Krainiiserver
    @Krainiiserver 5 років тому +47

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

  • @yuriynesterenko9280
    @yuriynesterenko9280 5 років тому +5

    Как всегда классный урок!! А последняя анотация просто космос))))

  • @user-uq4nd6go9c
    @user-uq4nd6go9c 4 роки тому +1

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

  • @andreiscurtu5908
    @andreiscurtu5908 4 роки тому +1

    Доделал до конца, теперь пересматриваю - со второго раза шикарно заходит )

  • @user-eh8qb6hl1s
    @user-eh8qb6hl1s 4 роки тому

    @JsonView крутая аннотация! Спасибо за труд! Отличные уроки!

  • @ingvarriver5793
    @ingvarriver5793 4 роки тому

    Отлично ещё один урок переварил. ). Все работает. 👍

  • @user-dx9yq5js2c
    @user-dx9yq5js2c 3 роки тому

    Как всегда все здоровско. Все по делу и ничего лишнего.

  • @user-qs4pb4ww7s
    @user-qs4pb4ww7s 4 роки тому

    Андрей, ты крут. Спасибо за уроки

  • @lucifron3112
    @lucifron3112 5 років тому +3

    Интересная фича с представлением json. Автор хочу ещё!

  • @artsbrand
    @artsbrand 5 років тому

    Спасибище за труды! @Data - заработала, лишние зависимости тоже спилил, все работает без них

  • @D.P._
    @D.P._ 5 років тому

    Спасибо! Отличный и лаконичный материал!

  • @user-to7lw5sb8b
    @user-to7lw5sb8b 5 років тому +6

    Ура новый урок!

  • @alexandrmakarevich5334
    @alexandrmakarevich5334 5 років тому +1

    Очень круто, спасибо!

  • @user-iu6yz6ck6h
    @user-iu6yz6ck6h 5 років тому +1

    Отличное видео. Спасибо

  • @Denis-wq5hn
    @Denis-wq5hn 4 роки тому +8

    Для того что бы использовать @Data я поставил над классом @JsonAutoDetect и добавил в build.gradle в dependencies annotationProcessor ('org.projectlombok:lombok')
    .
    Еще убрал из build.gradle зависимости:
    compile('javax.xml.bind:jaxb-api')
    compile('com.sun.xml.bind:jaxb-core')
    compile('com.sun.xml.bind:jaxb-impl')
    Они не нужны, если использовать @JsonAutoDetect.

  • @SergioUkrAr
    @SergioUkrAr 4 роки тому

    Спасибо за видео, очень интересный контент, а что вы посоветуете по работе с базой данных Orcle? какой драйвер?

  • @user-oy1pb9ne5r
    @user-oy1pb9ne5r 2 роки тому

    Спасибо, отличное видео!

  • @artsbrand
    @artsbrand 5 років тому

    за @JsonView отдельное спасибо!

  • @juggernaut1680
    @juggernaut1680 5 років тому +1

    Ух ты!! Спасибо!!

  • @madorin55
    @madorin55 5 років тому +3

    Обновил Lombok Plagin до версии 0.21.2018.2 , аннотация @Data заработала. Java правда 8.

  • @olexiypysarenko8090
    @olexiypysarenko8090 5 років тому +1

    Спасибо!

  • @renniqs1084
    @renniqs1084 5 років тому +1

    Очень круто!! Когда продолжение?

  • @lucifron3112
    @lucifron3112 5 років тому +17

    Андрей, если возможно сними видео как писать тесты для подобных приложений...очень надо , а долго времени изучать нет. Если можно через Mock. Спасибо!

  • @ILyaCyclone
    @ILyaCyclone 5 років тому

    Большое спасибо

  • @Sergey111111
    @Sergey111111 5 років тому +4

    Огромное спасибо за видосы! Кратко сжато качественно, а самое главное, оно компилируется. По поводу ломбок и @Data. Добавь в настройках IDEA галочку Enable annotation processing, и все заработает

    • @user-ri4rk7fe8j
      @user-ri4rk7fe8j 5 років тому

      И ведь точно, работает!

  • @AnnaSmirnova1
    @AnnaSmirnova1 4 роки тому

    Спасибо
    !!!

  • @user-zb8ei8ci9o
    @user-zb8ei8ci9o 5 років тому

    Возникла проблема с БД, запускаю код в идее, он отрабатывает без ошибок, но браузер пишет попытка соединения не удалась. В чем может быть проблема? PostgreSQL у меня установлен и на видео вы сказали, что предварительно необходимо создать БД, что именно вы имели ввиду?

  • @vladsynytsyn3074
    @vladsynytsyn3074 3 роки тому +4

    Если кто-то сейчас повторяет, в Spring boot 2.3.1 возникают ошибки при попытке неявно получить объект по id в контроллере (@PathVariable(name = "id") Object entity) 6:05. В предыдущей версии (2.3.0) вроде как работает нормально.

    • @Mex4nik_
      @Mex4nik_ 3 роки тому +1

      Спасибо тебе больше, несколько дней разбирался и думал в чем проблема, а тут все заработало

    • @_mikhirurg_
      @_mikhirurg_ 3 роки тому

      Да, та же проблема. В версии 2.3.0 все работает. Спасибо за совет)

    • @zurgsRushm
      @zurgsRushm 3 роки тому +1

      А почему не работает, есть ответ?

  • @ivsergey5150
    @ivsergey5150 5 років тому

    Андрей,скажите пожалуйста если я с браузера посылаю запрос на сервер(поиск человека по ФИО):
    @PostMapping("/find")
    public List Find(@RequestBody Person person)
    {
    System.out.println(person);
    return personRepo.FindPerson(person);
    }
    в @RequestBody Person person содержится JSON: "{"id":0,"f":"Иванов","i":"Иван","o":""}"
    так вот у меня валится бекенд с 500 ошибкой, не доходит даже до System.out.println(person);
    я думаю что бекенд не может входящий json превратить в Person.
    Причем не работает в итоговом jar файле, а в режиме dev все нормально.
    в чем может быть причина?

  • @raminkamalov9640
    @raminkamalov9640 4 роки тому

    Допустим у нас есть связанные двунаправленно сущности, образующие иерархию из нескольких таблиц. Как сделать так, чтобы каждый контроллер посылал только свой конкретный набор связей из этой полной иерархии?

  • @bek2074
    @bek2074 5 років тому +2

    стотысячмиллионов лайков!

  • @user-bu5ge8jp8n
    @user-bu5ge8jp8n 5 років тому

    спасибо!!!!!

  • @sensibleprogrammer1149
    @sensibleprogrammer1149 5 років тому +5

    Spring boot 2.0.5 все работает и запускается без зависимостей javax.xml.bind:jaxb-api, com.sun.xml.bind:jaxb-core, com.sun.xml.bind:jaxb-impl.

  • @GrishaObrazcovV
    @GrishaObrazcovV 5 років тому +12

    Я использую springBootVersion = '2.0.5.RELEASE' и подключаю только compile('javax.xml.bind:jaxb-api') и spring запускается без ошибок.
    Если добавлять библиотеки compile('com.sun.xml.bind:jaxb-core') и compile('com.sun.xml.bind:jaxb-impl') то при сборке gradle выдает следующую ошибку Error:java: Illegal char at index 50: C:\project\service\Could not find com.sun.xml.bind:jaxb-core:.

    • @letsCodeDru
      @letsCodeDru  5 років тому +1

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

    • @user-gj3rz7qv1l
      @user-gj3rz7qv1l 2 роки тому +5

      По состоянию на 07.02.2022 г., чтобы весь код работал зависимости должны быть такими:
      dependencies {
      implementation 'org.springframework.boot:spring-boot-starter-web'
      developmentOnly 'org.springframework.boot:spring-boot-devtools'
      testImplementation 'org.springframework.boot:spring-boot-starter-test'
      implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
      implementation 'org.postgresql:postgresql'
      implementation 'org.projectlombok:lombok'
      implementation 'javax.xml.bind:jaxb-api'
      }

    • @TravelW_
      @TravelW_ Рік тому

      @@user-gj3rz7qv1l Спасибо тебе огромное !!! Помогло

  • @Romigo4
    @Romigo4 3 роки тому

    в 2020 для внедрения репозитория в контроллер достаточно поставить аннотацию над контроллером @RequiredArgsConstructor и указать private final MessageRepo messageRepo;
    и добавить в build.gradle в блок dependencies: annotationProcessor 'org.projectlombok:lombok:1.18.12'

  • @raifebowman8592
    @raifebowman8592 3 роки тому

    Хз, если честно, в чем у меня проблема, но vue не отображает данные из бд на главной, хотя в самой базе данные есть, неоднократно проверял, и сам код из гитхаба копировал.

  • @bassturbatorark
    @bassturbatorark 3 роки тому +4

    Cannot convert value of type 'java.lang.String' to required type 'letscode.sarfan.domain.Message': no matching editors or conversion strategy found

    • @user-cr2dd3wk5m
      @user-cr2dd3wk5m 3 роки тому

      смени версию спринга на 2.3.0
      plugins {
      id 'org.springframework.boot' version '2.3.0.RELEASE'
      id 'io.spring.dependency-management' version '1.0.9.RELEASE'
      id 'java'
      }
      group = 'letscode'
      version = '0.0.1-SNAPSHOT'
      sourceCompatibility = '11'
      repositories {
      mavenCentral()
      }
      configurations {
      developmentOnly
      runtimeClasspath {
      extendsFrom developmentOnly
      }
      }
      dependencies {
      compile 'org.springframework.boot:spring-boot-starter-web:2.3.0.RELEASE'
      compile 'org.springframework.boot:spring-boot-devtools:2.3.0.RELEASE'
      compile 'org.springframework.boot:spring-boot-starter-data-jpa:2.3.0.RELEASE'
      compile 'mysql:mysql-connector-java:8.0.21'
      compile 'org.projectlombok:lombok'
      compile 'javax.xml.bind:jaxb-api:2.3.0'
      testImplementation('org.springframework.boot:spring-boot-starter-test') {
      exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
      }
      }
      test {
      useJUnitPlatform()
      }

    • @crackinglad7644
      @crackinglad7644 3 роки тому

      @@user-cr2dd3wk5m получается, в 2.3.1. такая магия уже не срабатывает? У себя сделал вытаскивание из репозитория по айдишнику - и взлетело.

  • @dmitrysomsin2117
    @dmitrysomsin2117 4 роки тому

    thx

  • @user-se1mk6xq3g
    @user-se1mk6xq3g 4 роки тому

    Крутые видео. Спасибо. Все понятно и есть где применить.
    У меня один вопрос. Не по теме. Если автор ответ. Огромное спасибо.
    У меня в приложении есть потребность реализовать json-rpc. Можно ли внедрить в решения рассматриваемые на ваших занятиях json-rpc? И на сколько это целесообразно ?

    • @user-se1mk6xq3g
      @user-se1mk6xq3g 4 роки тому

      Я имею ввиду, что разрабатываю решение задач а базе Ваших уроков. Но босы хотят json-rpc. Вот хочу понять насколько это целесообразно ?

    • @letsCodeDru
      @letsCodeDru  4 роки тому +1

      Можно все. А нужно ли и оправдано ли - надо смотреть по месту и по задачам

    • @user-se1mk6xq3g
      @user-se1mk6xq3g 4 роки тому

      А не подскажете куда копать по этому вопросу. С помощью каких средства спринга можно реализовать json-rpc 2.0?

  • @rudolfsikorsky7900
    @rudolfsikorsky7900 Рік тому +2

    Чтобы удалить сущность из базы нет необходимости формировать объект, в стандартном репозитории есть метод *deleteById* . Предлагаю в контроллере метод delete переписать так:
    @DeleteMapping("{id}")
    public void delete(@PathVariable long id) {
    messageRepo.deleteById(id);
    }

  • @Jmishenko860
    @Jmishenko860 2 роки тому

    Спасибо за почти готовую курсовую xD

  • @user-vu4md3wq6g
    @user-vu4md3wq6g 3 роки тому +4

    Привет из декабря 2020 :)
    Всех с наступающим!
    Просматривая комментарии, заметил вопросы про БД. Сам тоже столкнулся и решил проблему свою. Кто желает подключаться через MySQL, то читайте...
    Я создал БД в консоли - CREATE DATABASE db_name; USE db_name;
    db_name - тут вы пишите свое название БД
    Затем в файле application.properites пишем...
    spring.jpa.hibernate.ddl-auto=update
    spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/db_name?useUnicode=true&serverTimezone=UTC&useSSL=false//
    После имени БД строчка кода, чтобы компилятор не ругался
    spring.datasource.username=root
    //У вас может быть свое имя
    spring.datasource.password= //У вас может быть свой пароль (У меня его нет)
    spring.jpa.generate-ddl=true
    spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
    В файле bulid.gradle
    dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    // implementation 'org.postgresql:postgresql'

    runtimeOnly 'mysql:mysql-connector-java'
    // Для MySQL
    implementation 'org.projectlombok:lombok'
    implementation 'javax.xml.bind:jaxb-api'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
    exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }

    • @user-gh1zi5gp4s
      @user-gh1zi5gp4s 2 роки тому

      Что бы не пытался сделать выбивает "Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured."

  • @YWNWA-ZXC
    @YWNWA-ZXC 4 роки тому +1

    я как человек с опытом(с твоих курсов), почему не учишь сразу правильно писать: Service inteface -> Impl , вместо напрямую через Repository в контроллере использовать?)

    • @mizantropoff
      @mizantropoff Місяць тому

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

  • @user-mf7ur4zt9k
    @user-mf7ur4zt9k 5 років тому +2

    у меня не получается подключиться к базе данных. Ошибка: org.postgresql.util.PSQLException: Подсоединение по адресу localhost:5432 отклонено. Проверьте что хост и порт указаны правильно и что postmaster принимает TCP/IP-подсоединения.

    • @letsCodeDru
      @letsCodeDru  5 років тому +1

      А бд установлена-запущена?

    • @user-mf7ur4zt9k
      @user-mf7ur4zt9k 5 років тому +1

      установлена, но не получилось запустить, с MySQL тоже самое, хотя раньше с свитером нормально работало. Проблему удалось решить использованием бд h2

  • @eclipsium_msk
    @eclipsium_msk 4 роки тому

    spring.jackson.serialization.indent-output=true
    Не поможет ?

  • @jonik_doit4463
    @jonik_doit4463 5 років тому

    насколько гуд-практис явл. реализация интрфейса Serializable в классах сущностей?

    • @letsCodeDru
      @letsCodeDru  5 років тому +1

      Норм. Если это действительно надо. "прозапас" писать не надо

  • @mike_mi_mike
    @mike_mi_mike 4 роки тому

    оставляйте версию спринга как на видео, я делал на 2.3.1 - в итоге ничего не работало)

  • @user-qy7yv1ut4c
    @user-qy7yv1ut4c 5 років тому

    org.postgresql.util.PSQLException: ОШИБКА: отношение "hibernate_sequence" не существует
    Позиция: 17

  • @user-zj2bp2ll1e
    @user-zj2bp2ll1e 4 роки тому

    Не коннектится созданная база PostgreSQL при создании базы. Ошибка:
    Connection to sarafan@localhost failed.
    [08001] Подсоединение по адресу localhost:5432 отклонено. Проверьте что хост и порт указаны правильно и что postmaster принимает TCP/IP-подсоединения.
    Подскажите, пожалуйста, как можно это победить?

    • @letsCodeDru
      @letsCodeDru  4 роки тому

      Бд установлена?

    • @alexsays1746
      @alexsays1746 4 роки тому

      создайте базу из консоли
      создайте в базе юзера с паролем

  • @YWNWA-ZXC
    @YWNWA-ZXC 4 роки тому +3

    @Getter @Setter @Builder это если про Lombok, что вы искали, если еще нужно)

    • @Spiculum24
      @Spiculum24 3 роки тому

      @Data и так содержит в себе геттеры/сеттеры

  • @mizantropoff
    @mizantropoff Місяць тому

    Простите, я не понимаю, как это работает. А именно - мы просто указываем маппинг обработанный в контроллерею , как ресурс, и Vue компоненты подхватывают и нашу базу, и методы, которые даже называются по разному во Vue и в контроллере. Ну ладно , messages подхватываются, но методы? Мы ведь даже не указываем get, post, put, delete. И конечно, я не смог на лету все это адаптировать к Vue3, использую пока Vue 2. Потом буду думать как мигрировать. Пока не нашел нормального описания именно варианта с CDN во Vue3, большая часть материала касается приложений, у которых и серверная и клиентская часть на Vue. Если кто полезные ссылки даст - буду рад. Мне нравится этот вариант, так как для демонстрации два сервера городить не вижу смысла, а тут , как я понимаю, все работает на одном сервере - и фронт и бэк.

  • @user-zb3gr6vi8w
    @user-zb3gr6vi8w 3 роки тому

    На словах ".. я могу предложить оттакую запись .." плашки закрывают всё))

  • @noyklgd4403
    @noyklgd4403 5 років тому +3

    ссыль на код битая

    • @letsCodeDru
      @letsCodeDru  5 років тому +1

      Исправил, спасибо)

  • @RostikShunlov
    @RostikShunlov 5 років тому +4

    хм забавно, почему то у меня стал запускаться Debug режим за минуты 4, а обычный запуск приложения занимает 8 сек. Но дебаг блин более 2-4 минут, как так то?
    произошло это не знаю даже после чего .
    Кто то сталкивался?
    А если точнее запуски дебага идет за
    Started TestApplication in 291.606 seconds (JVM running for 292.909)
    А обычный
    Started TestApplication in 7.271 seconds (JVM running for 8.299)
    Откатился на предыдущий урок, запускаться стал за 4 сек дебаг.
    Сейчас буду искать причину

    • @RostikShunlov
      @RostikShunlov 5 років тому

      Нашел, при наследовании extends JpaRepository оочень долго начинает думать. Почему с чем это может быть связано? почему только в дебаг режиме
      Пом файл
      org.springframework.boot
      spring-boot-starter-data-jpa
      2.1.0.RELEASE


      org.postgresql
      postgresql
      42.2.5


      org.projectlombok
      lombok
      1.18.4
      provided

    • @RostikShunlov
      @RostikShunlov 5 років тому

      Бред какой то
      начал юзать более старые версии JPA все тоже самое

    • @RostikShunlov
      @RostikShunlov 5 років тому +2

      Забавно
      Установил intellij IDEA Ultimate, Debug mode начал запускаться за 12 сек

    • @AntoxaShow
      @AntoxaShow 3 роки тому

      возможно ты дебажил метод, что тормозит запуск дебаг мода

  • @vladsoldatenko8561
    @vladsoldatenko8561 5 років тому

    Привет. Всем у кого проблемка типа "java.sql.SQLException: The server timezone value 'UTC' is unrecognized or represents more than one timezone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc timezone value if you want to utilize timezone support.", решение здЭсь: stackoverflow.com/questions/26515700/mysql-jdbc-driver-5-1-33-time-zone-issue

  • @andreyzapolsky8834
    @andreyzapolsky8834 2 роки тому

    2021: implementation 'com.sun.xml.bind:jaxb-core:3.0.2'
    implementation 'com.sun.xml.bind:jaxb-impl:3.0.2'

  • @D.P._
    @D.P._ 5 років тому

    Спасибо! Отличный и лаконичный материал!