devmark_ru
devmark_ru
  • 73
  • 270 306
GraphQL в Spring Boot: обработка ошибок
#devmark #graphql #kotlin #spring Продолжаем цикл статей про работу с GraphQL в проекте, написанном на Kotlin и Spring Boot. Ранее мы создали проект, который возвращает информацию о книгах и их авторах. Затем мы научились менять данные. Теперь рассмотрим как можно обрабатывать ошибки в GraphQL и менять их формат.
Статья по теме: devmark.ru/article/spring-boot-graphql-custom-exception
Пример: github.com/devmarkru/spring-boot-graphql-example
Все новости проекта: t.me/devmark_ru
Переглядів: 191

Відео

GraphQL в Spring Boot: изменение данных с помощью мутаций
Переглядів 1654 місяці тому
#devmark #graphql #kotlin #spring Для изменения данных в GraphQL используются так называемые "мутации". По сути это обычные методы со входными и выходными параметрами, доступные через протокол взаимодействия GraphQL. Статья по теме: devmark.ru/article/spring-boot-graphql-mutation Пример: github.com/devmarkru/spring-boot-graphql-example Все новости проекта: t.me/devmark_ru
GraphQL в Spring Boot: проблема N + 1, кастомные типы данных
Переглядів 3714 місяці тому
#devmark #graphql #kotlin #spring GraphQL - это стандарт клиент-серверного взаимодействия, который позволяет довольно гибко запрашивать данные с сервера. Основное отличие от традиционных REST-запросов состоит в том, что клиент сам выбирает, какие поля он будет запрашивать у сервера, тогда как REST предполагает заранее определённый фиксированный формат. При этом сервер будет подгружать из хранил...
Алгоритм поиска чисел Фибоначчи на Java
Переглядів 2214 місяці тому
#алгоритмы #java Рассмотрим реализацию поиска чисел из последовательности Фибоначчи на Java. Каждое следующее число в последовательности равно сумме двух предыдущих. Последовательность начинается с 0 и 1: 0, 1, 1, 2, 3, 5, 8, ... . В этой последовательности числа растут очень быстро, поэтому результат будем возвращать в типе long. Всего мы можем вернуть первые 92 числа этой последовательности. ...
Интерфейсы Comparable и Comparator в Java
Переглядів 5015 місяців тому
Интерфейс Comparable задаёт правила сортировки по умолчанию. Объекты, реализующие этот интерфейс, уже могут сравниваться с помощью стандартных методов сортировки, поиска минимума и максимума. Такие коллекции как TreeMap и TreeSet требуют реализацию интерфейса Comparable, т.к. автоматически сортируют элементы. Если вам нужно поддерживать несколько различных вариантов сортировки, используйте инте...
Подсчёт количества строк в текстовом файле на Java
Переглядів 4819 місяців тому
#devmark #java #file Во многих редакторах при работе с текстовым документом вы можете видеть, сколько всего строк содержится в этом файле. Строки между собой разделяются символом перевода строки, который в каждой операционной системе (Windows, Unix, Mac) свой. Давайте разберёмся, как быстро подсчитать количество строк в текстовом файле независимо от той ОС, в котором выполняется наш код. Более ...
Как прочитать большой текстовый файл на Java наиболее оптимальным образом
Переглядів 5199 місяців тому
#devmark #java #file Давайте научимся читать большой текстовый файл построчно. При этом каждую строку будем как-то обрабатывать. Например, будем искать наибольшую длину строки. Поскольку размер файла больше 100 МБ, его чтение происходит с небольшой задержкой. Мы рассмотрим три варианта реализации такого чтения и выберем наиболее быстрый из них. Статья по теме: devmark.ru/article/read-file-line-...
Как сохранить большой текстовый файл на Java наиболее оптимальным образом
Переглядів 6979 місяців тому
#devmark #java #file Давайте сгенерируем строку из случайных символов на Java и затем сохраним её в текстовый файл. Строка должна быть очень большой (более 100 миллионов символов), чтобы мы могли легко заметить разницу во времени, которое требуется на сохранение файла. Рассмотрим 3 варианта: обычный FileWriter, FileWriter с буферизацией и неблокирующее сохранение файла с помощью пакета java.nio...
Как скомпилировать исходники java вручную
Переглядів 6329 місяців тому
#java #гайд #jdk В повседневной работе никто из нас не компилирует исходники Java вручную. За нас это делают такие инструменты как maven, gradle или интегрированная среда разработки типа Idea. Но для понимания процессов, которые происходят при каждом тестовом запуске вашего приложения, имеет смысл хотя бы один попробовать это сделать самостоятельно прямо из консоли. Статья по теме: devmark.ru/a...
Интерфейсы Iterator и Iterable в Java
Переглядів 1,8 тис.9 місяців тому
Интерфейсы Iterator и Iterable в Java
Java 21: Pattern matching в switch
Переглядів 42710 місяців тому
Java 21: Pattern matching в switch
Value class в Kotlin
Переглядів 34210 місяців тому
Value class в Kotlin
SequencedMap в Java 21
Переглядів 38410 місяців тому
SequencedMap в Java 21
SequencedCollection и SequencedSet в Java 21
Переглядів 52510 місяців тому
SequencedCollection и SequencedSet в Java 21
Работа с json в PostgreSQL
Переглядів 7 тис.Рік тому
Работа с json в PostgreSQL
Алгоритм инвертирования двусвязного списка
Переглядів 493Рік тому
Алгоритм инвертирования двусвязного списка
Интерфейс RowMapper и его реализации в Spring JDBC API
Переглядів 916Рік тому
Интерфейс RowMapper и его реализации в Spring JDBC API
Аудит изменений данных в Spring Data JPA
Переглядів 1,7 тис.Рік тому
Аудит изменений данных в Spring Data JPA
Разбор и вычисление арифметических выражений на Java
Переглядів 1,8 тис.Рік тому
Разбор и вычисление арифметических выражений на Java
Алгоритм инвертирования массива на Java
Переглядів 747Рік тому
Алгоритм инвертирования массива на Java
Алгоритм определения анаграмм
Переглядів 1,5 тис.Рік тому
Алгоритм определения анаграмм
Как быстро экспортировать и импортировать данные с помощью Datagrip
Переглядів 5 тис.2 роки тому
Как быстро экспортировать и импортировать данные с помощью Datagrip
Алгоритмы: проверка слов и предложений на палиндром
Переглядів 2 тис.2 роки тому
Алгоритмы: проверка слов и предложений на палиндром
Поддержка мультиязычности в приложениях на Spring Boot
Переглядів 9932 роки тому
Поддержка мультиязычности в приложениях на Spring Boot
Алгоритмы: поиск простых чисел с помощью "решета Эратосфена"
Переглядів 1,5 тис.2 роки тому
Алгоритмы: поиск простых чисел с помощью "решета Эратосфена"
Алгоритмы: бинарный поиск на отсортированном массиве (реализация на Java)
Переглядів 2,6 тис.2 роки тому
Алгоритмы: бинарный поиск на отсортированном массиве (реализация на Java)
Подключение Springdoc для автоматизации документирования REST API
Переглядів 4,3 тис.2 роки тому
Подключение Springdoc для автоматизации документирования REST API
Полезные советы по работе с BigDecimal в Java
Переглядів 2,9 тис.2 роки тому
Полезные советы по работе с BigDecimal в Java
Кеширование данных в Spring Boot
Переглядів 8 тис.2 роки тому
Кеширование данных в Spring Boot
Алгоритмы: поиск простых чисел на Java
Переглядів 4,4 тис.2 роки тому
Алгоритмы: поиск простых чисел на Java

КОМЕНТАРІ

  • @KirillMvS
    @KirillMvS День тому

    Спасибо за видео)

  • @NikKyb-c4o
    @NikKyb-c4o 2 дні тому

    Спасибо, полезный материал

  • @kattrin9460
    @kattrin9460 7 днів тому

    Почему в метод maskPassword лучше передавать Password , а не String?

    • @devmark
      @devmark 2 дні тому

      Чтобы быть точно уверенными, что это не какая-то строка, а именно пароль.

  • @sergeiTk
    @sergeiTk 7 днів тому

    Супер топ, спасибо!

  • @АлексейАлексеев-ц8х9т

    Удивляюсь комментариям а-ля "Самое понятное за долгое время разъяснение". По сути ведь вообще ничего не объяснил, просто озвучил свои действия, но совсем не рассказал принцип действия. Это очередное объяснение, понятное, для тех, кто это уже знает и понимает, а для новичков вообще не ясно зачем там union, почему path каждый раз дополняется новыми данными, где и как происходят итерации. В очередной раз убеждаюсь, что между "понимать" и "уметь объяснить" огромная пропасть.

    • @devmark
      @devmark 7 днів тому

      Сожалею, что видео оказалось недостаточно информативным. Вы можете ещё прочитать статью devmark.ru/article/postgres-recursive-query - может так понятнее станет.

    • @АлексейАлексеев-ц8х9т
      @АлексейАлексеев-ц8х9т 7 днів тому

      @devmark сожалею, что мой комментарий оказался недостаточно информативным и вы не уловили его посыл. Я понимаю, как работает рекурсия в sql, но если бы не понимал, то ваш ролик не принёс бы понимания. Улавливаете?

  • @ukr-pig
    @ukr-pig 11 днів тому

    Привет.А можешь подсказать с этим ботом батарейку за сколько высасывает телефон ?Он работает с погашенным дисплеем на телефоне ?

    • @devmark
      @devmark 7 днів тому

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

  • @jalgasungarbaev
    @jalgasungarbaev 23 дні тому

    Здравствуйте, я создал новый проект и через postman просто hello world хотел получить, на новых проектах что то не исправлено что ли не работает Java 17or 21 sprint boot 3.3.4, а ваших проектах в github работает. Методы даже в Actuator и Mapping не добавляеться

    • @devmark
      @devmark 7 днів тому

      Видимо пора актулизировать примеры) Постараюсь сделать.

  • @ignat934
    @ignat934 28 днів тому

    Может быть, я прослушал, но где плюсы и минусы?

    • @devmark
      @devmark 28 днів тому

      Применение рекурсии в этом алгоритме позволяет сделать код более компактным. Но если рекурсию применять неправильно - можно существенно потерять в производительности. Также в теории для очень большой вложенности рекурсии можно получить переполнение стека (StackOverflowException). Тогда как вариант с циклом лишён этих недостатков, но кода будет чуть больше.

  • @Stillfabulos
    @Stillfabulos 28 днів тому

    О, хорошо. Самая свежая инфа

  • @КонстантинАлексеев-ы9б

    Хороший видос, как раз по этой теме работаю сейчас, лайк сразу. Только такой вопрос остался, как я могу через питон добавить в БД данные из json файла ( работаю с библиотекой psycopg2). Пока что выходит через костыли и ф строкой.Может есть какие то фичи. Буду признателен за ответ

    • @devmark
      @devmark 28 днів тому

      Спасибо за лайк) Но по питону не подскажу, я специализируюсь на java и kotlin.

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

    а если мне нужны поля только для дат, без инфы кто внес изменения, то мне не нужен AuditConfig? Но куда мне тогда вешать аннотацию @EnableJpaAuditing?

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

    Спасибо!

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

    Итеребл. Ударение на первый слог. Как и Нулебл например. Не нулЭйбл и итерЭйбл. Да, есть слово дизЭйбл, но это совсем другое :)

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

      Ок, буду иметь в виду)

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

    Большое спасибо автору! Лаконично и познавательно)

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

    как я понял. Hashset. Основан hashMap. на хеш таблицах ключ значение. только Ключ это Объект(в данном случае String). а значение object(заглушка). только почему не у упорядоченном порядке? LinkedHashSet HashSet только со ссылками на предыдущий и следующий элемент. а TreeSet на дереве завязан и сортировка происходит с помощью компоратора. который видимо по умолчанию стринг сортирует от а до я. Скорее всего его можно переопределить и сортировку сделать наоборот. Я правильно всё написал?

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

      Да, вы все абсолютно верно написали! HashSet не гарантирует порядок, т.к. оптимизирован под быстрый поиск значений. Вернее, порядок у него какой то есть, но не очевидный, поэтому можно считать, что порядка нету)

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

    я запрещаю вам использовать postgres (с) Json Стэтхэм

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

    СПАСИБО ТЕБЕ ОГРОМНОЕ!!! 🙏🙏🙏

  • @user-my6yf1st8z
    @user-my6yf1st8z Місяць тому

    спасибо

  • @dragon-o1u
    @dragon-o1u 2 місяці тому

    Спасибо огромное) Очень помогли.

  • @4illent542
    @4illent542 2 місяці тому

    объяснил круто, но музыка такая, будто в секс шоп попал xd

    • @devmark
      @devmark 2 місяці тому

      @@4illent542 интересная ассоциация))

  • @tylersj
    @tylersj 2 місяці тому

    Спасибо большое!

  • @Checkmate-p8r
    @Checkmate-p8r 2 місяці тому

    как вычислить вот такое выражение sin(2*(-5+1.5*4)+28)

    • @devmark
      @devmark 2 місяці тому

      в вашем выражении присутствуют как минимум два оператора, про которые я не рассказывал. Это функция (sin) и унарный минус (-5). Для вычисления подобных выражений используется подобный подход, но реализация будет чуть сложнее, чем та, которую я привёл. Также надо добавить поддержку чисел с десятичной точкой (т.е. парсинг чисел также надо доработать).

  • @roman.sinetsky
    @roman.sinetsky 2 місяці тому

    Также меня озадачил момент что проверяя в Postman localhost:8080/report и localhost:8080/report?id=9 возвращается одно и то же, все возможные report. Почему? В контроллере вот так: @GetMapping fun getLastReports( ): List<ReportDto> = reportService.getLastReports() @GetMapping("/{id}") fun findReportById( @RequestParam("id") id: Int, ): ReportDto = reportService.findReportById(id)

    • @roman.sinetsky
      @roman.sinetsky 2 місяці тому

      Всё понял. На один эндпойнт нельзя вешать два метода, ещё и с возвратом разных данных. Разделил по разным путям - localhost:8080/report и localhost:8080/report/id/9. Спасибо!

  • @roman.sinetsky
    @roman.sinetsky 2 місяці тому

    Если я захочу обращаться и по localhost:8080/cargo и по localhost:8080/cargo?page=1 , то значит я должен реализовать getAll() и getAll(pageIndex)? Я попробовал и возникло: Caused by: java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'cargoController' method com.example.cargo.controller.CargoController#getAll(int) to {GET [/cargo]}: There is already 'cargoController' bean method com.example.cargo.controller.CargoController#getAll() mapped.

    • @devmark
      @devmark 2 місяці тому

      Нет, можно обойтись одним методом с опциональным параметром. (аннотация RequestParam с параметром required = false)

    • @roman.sinetsky
      @roman.sinetsky 2 місяці тому

      @@devmark всё равно технические моменты не ясны. Вот я прописал в reportController: @GetMapping fun getLastReports( @RequestParam(value ="page", required = false) pageIndex: Int, ): List<ReportDto> = reportService.getLastReports() А дальше как это обработать в reportService и reportRepository? У меня тут явно указано что reportService.getLastReports() не принимает параметров, а как привязать ещё и reportService.getLastReports(pageIndex) ?

    • @roman.sinetsky
      @roman.sinetsky 2 місяці тому

      @@devmark Сделал так @GetMapping fun getLastReports( @RequestParam(value ="page", required = false) pageIndex: Int?, ): List<ReportDto> = if (pageIndex == null) reportService.getLastReports() else reportService.getLastReports(pageIndex) Отлично работает, может кому полезно будет. Благодарю.

    • @devmark
      @devmark 2 місяці тому

      Можно так, а можно по дефолту индекс ставить в 0 и какой-нибудь заведомо большой размер страницы.

  • @cjcbcrf3223
    @cjcbcrf3223 2 місяці тому

    Жаль, что так мало видео по postgres, видео нереально расслабляющие.

  • @ГеннадийШушпанов-д1ч

    В конечном счете дело в точности, но в неочевидном ее аспекте. Дело не числе разрядов, а в системе счисления. Финансисты имеют дело с десятичными дробями, а в двоичном представлении, например 5 или 10 копеек -- бесконечные дроби.

  • @dishc532
    @dishc532 3 місяці тому

    я бы обсудил с командой какой формат использовать - yaml или xml. Поскольку ямл в связи со своей развернутостью становится очень нечитабельным с объемом датасетов. XML в результате намного компактнее как оказалось

  • @maratmurtuzaliev4745
    @maratmurtuzaliev4745 3 місяці тому

    Ctrl+Y для быстрого удаления текущей строки или выделенных строк

  • @bari9631
    @bari9631 3 місяці тому

    практически совершенное видео

  • @Gidropoljb
    @Gidropoljb 3 місяці тому

    Также в TreeMap можно задать свой порядок сортировки с помощью интерфесов Comparable или Comparator

    • @devmark
      @devmark 3 місяці тому

      Верно, спасибо за дополнение!

  • @GalaxyMinelocalhost
    @GalaxyMinelocalhost 3 місяці тому

    Друг, у тебя не все IDE видно

    • @devmark
      @devmark 3 місяці тому

      Да, ещё не до конца освоился с форматом shorts так как записываю с ноута.

  • @sergeiTk
    @sergeiTk 4 місяці тому

    Супер!

  • @sergeiTk
    @sergeiTk 4 місяці тому

    Супер!

  • @winter-lb7id
    @winter-lb7id 4 місяці тому

    Что означает var document :Document ? у моего document нет никаких методов ((

    • @devmark
      @devmark 4 місяці тому

      Это просто сокращение от Document document. Проверьте, что вы импортируете класс именно из библиотеки jsoup.

    • @winter-lb7id
      @winter-lb7id 4 місяці тому

      @@devmark удалил :Document - заработало. По сути обычный html , но не интуитивно понятно по синтаксису

  • @Alexdee1983
    @Alexdee1983 4 місяці тому

    Понравилось как автор преподносит материал, просто и понятно

  • @AlexSmile-y2x
    @AlexSmile-y2x 4 місяці тому

    круто! делай еще, жаль, что нельзя дополнителмный лайк поставить за хорошую музыку на фоне

    • @devmark
      @devmark 4 місяці тому

      Спасибо! Любые комментарии под видео также приветствуются)

  • @blavodbatman
    @blavodbatman 4 місяці тому

    Я правильно понимаю, что если не добавлять кастомные типы, а в схеме указать price: String!, birthDate: String!, то запрос тоже отработает корректно?

    • @devmark
      @devmark 4 місяці тому

      В принципе большинство типов данных можно передавать строкой. Но тогда потребуется делать дополнительный парсинг. А в варианте с кастомными типами все работает автоматически.

    • @blavodbatman
      @blavodbatman 4 місяці тому

      @@devmark Это я к тому, что если нужно просто на фронте показать пользователю результат как есть, то технически можно всё, кроме id и объектов, объявлять в схеме String, а GraphQL уже под капотом сам сделает что-то типа toString() для полей, не являющихся строкой. А вот если нужно получить данные и что-то с ними сделать, то кастомные типы - must have.

  • @anjelomanoranjan
    @anjelomanoranjan 4 місяці тому

    Спасибо! Ты ТОП!

  • @rolandswamp
    @rolandswamp 5 місяців тому

    красавчик

  • @eduardklygunov1412
    @eduardklygunov1412 5 місяців тому

    Вот это возвращение неожиданное ) Я хоть и все что было в видно давно знаю, но все равно было интересно посмотреть, спасибо

    • @devmark
      @devmark 5 місяців тому

      Да я вроде никуда и не уходил)

  • @AndreyOtryaskin
    @AndreyOtryaskin 5 місяців тому

    Дружище, я наткнулся на тебя как-то случайно и подписался. У тебя очень хороший канал. Не бросай его только.

    • @devmark
      @devmark 5 місяців тому

      Спасибо!

  • @pashahous
    @pashahous 5 місяців тому

    Спасибо, хорошо преподнесли инфу.

  • @anjelomanoranjan
    @anjelomanoranjan 5 місяців тому

    Ты ТОП! Благодарю!

  • @USSCallister-up
    @USSCallister-up 5 місяців тому

    Интересно почему TreeSet типизированный типом без имплементации Comparable выдает ошибку только в рантайме? Это же жутко не удобно и опасно.

    • @devmark
      @devmark 5 місяців тому

      У меня такой же вопрос возник, когда я изучал эту тему)

  • @vano20230
    @vano20230 5 місяців тому

    классное видео, спс)

  • @BogdanRaspletin
    @BogdanRaspletin 5 місяців тому

    С первого раза всё понял! Подача очень хорошая

  • @jhvjhbkjn6050
    @jhvjhbkjn6050 6 місяців тому

    почему у меня нет выбора spring initialiser? У меня только spring boot... Как сделать?

    • @devmark
      @devmark 6 місяців тому

      А какая у вас версия Idea? Community или Ultimate?

  • @anjelomanoranjan
    @anjelomanoranjan 6 місяців тому

    Блестательное объяснение. Я правильно понял, что: 1) left & right мы могли бы назвать first & last? 2) Если у нас дан массив {1 2 3 4 5 6 7 8 9}, то left = 1, right = 9, а middle = 5. И когда мы двигаем границу диапазона вправо или влево, то мы переходим от 1 к 2 и от 2 к 3 если сдвигаем границу вправо, и наоборот, от 9 к 8 и от 8 к 7 если сдвигаем границу влево?

    • @devmark
      @devmark 6 місяців тому

      1) да 2) когда мы двигаем границу, то мы всегда отталкиваемся от middle, т.е. от 5 в вашем примере. и если искомое число меньше 5, то ставим right = 4. если искомое число больше 5, то ставим left = 6. То есть всегда выбираем ту половину, где потенциально может быть искомое число, т.к. массив отсортирован.

    • @anjelomanoranjan
      @anjelomanoranjan 6 місяців тому

      @@devmark спасибо.

  • @anjelomanoranjan
    @anjelomanoranjan 6 місяців тому

    Крутое видео! Благодарю! Жду новые видео по Java

    • @devmark
      @devmark 6 місяців тому

      Спасибо)