Перейти к основному содержимому

· 8 мин. чтения

1. Обзор

REST — это архитектура без сохранения состояния, в которой клиенты могут получать доступ к ресурсам на сервере и управлять ими. Как правило, службы REST используют HTTP для объявления набора ресурсов, которыми они управляют, и предоставляют API, который позволяет клиентам получать или изменять состояние этих ресурсов.

В этом руководстве мы узнаем о некоторых передовых методах обработки ошибок REST API, включая полезные подходы к предоставлению пользователям соответствующей информации, примеры с крупных веб-сайтов и конкретную реализацию с использованием примера приложения Spring REST.

2. Коды состояния HTTP

· 5 мин. чтения

1. Введение

В этом руководстве мы рассмотрим различные способы фильтрации ресурсов с помощью Java API Kubernetes.

В наших предыдущих статьях, посвященных Kubernetes Java API, мы сосредоточились на доступных методах запроса, управления и мониторинга ресурсов кластера.

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

API Kubernetes поддерживает три способа ограничения области поиска:

  • Пространства имен: область действия ограничена данным пространством имен Kubernetes.
  • Селекторы полей: область ограничена ресурсами, имеющими совпадающие значения полей
  • Селекторы меток: область ограничена ресурсами, имеющими совпадающие метки.

· 3 мин. чтения

1. Обзор

В этой статье мы узнаем, как исправить ошибки JUnit NoSuchMethodError и NoClassDefFoundError . Такие проблемы обычно возникают, когда у нас есть две разные версии JUnit в нашем пути к классам . Такая ситуация может возникнуть, например, когда версия JUnit проекта отличается от той, которая используется в зависимости Maven или Gradle.

2. JUnit NoClassDefFoundError в проекте Spring

Допустим, у нас есть проект Maven, использующий Spring Boot 2.1.2 и зависимость Spring Boot Starter Test . С такой зависимостью мы можем писать и запускать автоматические тесты, используя JUnit 5.3.2, который является JUnit-версией зависимости spring-boot-test .

Теперь предположим, что мы продолжим использовать Spring Boot 2.1.2. Однако мы хотим использовать JUnit 5.7.1. Возможным подходом было бы включение зависимостей junit-jupiter-api , junit-jupiter-params , junit-jupiter-engine и junit-platform-launcher в наш файл pom.xml :

· 5 мин. чтения

1. Обзор

В этом кратком руководстве мы рассмотрим структуру данных CircularFifoQueue , представленную в пакете collections4.queue библиотеки Apache Commons Collections .

CircularFifoQueue<E> реализует интерфейс Queue<E> и представляет собой неблокирующую очередь фиксированного размеракогда вы добавляете элемент в заполненную очередь, самый старый элемент удаляется, чтобы освободить место для нового элемента . ** **

2. Зависимость от Maven

· 4 мин. чтения

1. Обзор

В этой статье мы рассмотрим дополнения Java 9 к необязательному API.

Помимо модульности, в Java 9 также добавлены три очень полезных метода для класса Optional .

2. Метод or ()

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

· 9 мин. чтения

1. Введение

В этой статье мы рассмотрим, как использовать библиотеку ASM для управления существующим классом Java путем добавления полей, добавления методов и изменения поведения существующих методов.

2. Зависимости

Нам нужно добавить зависимости ASM в наш pom.xml :

<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>6.0</version>
</dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm-util</artifactId>
<version>6.0</version>
</dependency>

· 9 мин. чтения

1. Обзор

Java 8 предоставляет API для создания подключаемых модулей Javac . К сожалению, для него трудно найти хорошую документацию.

В этой статье мы собираемся показать весь процесс создания расширения компилятора, которое добавляет пользовательский код в файлы *.class .

2. Настройка

Во-первых, нам нужно добавить tools.jar JDK в качестве зависимости для нашего проекта:

· 3 мин. чтения

1. Обзор

В этой быстрой статье мы рассмотрим CopyOnWriteArrayList из пакета java.util.concurrent .

Это очень полезная конструкция в многопоточных программах — когда мы хотим выполнить итерацию по списку потокобезопасным способом без явной синхронизации.

2. API CopyOnWriteArrayList

В дизайне CopyOnWriteArrayList используется интересный метод, позволяющий сделать его потокобезопасным без необходимости синхронизации. Когда мы используем любой из методов модификации, таких как add() или remove() , все содержимое CopyOnWriteArrayList копируется в новую внутреннюю копию.

· 5 мин. чтения

1. Обзор

В этой статье мы рассмотрим конструкцию DelayQueue из пакета java.util.concurrent . Это блокирующая очередь, которую можно использовать в программах производитель-потребитель.

У него есть очень полезная характеристика — когда потребитель хочет взять элемент из очереди, он может взять его только тогда, когда истечет задержка для этого конкретного элемента.

2. Реализация Delayed для элементов в DelayQueue

Каждый элемент, который мы хотим поместить в DelayQueue , должен реализовать интерфейс Delayed . Допустим, мы хотим создать класс DelayObject . Экземпляры этого класса будут помещены в DelayQueue.

· 2 мин. чтения

1. Обзор

В этой быстрой статье мы будем использовать Java 8 Stream API и класс Introspector для вызова всех геттеров, найденных в POJO.

Мы создадим поток геттеров, проверим возвращаемые значения и посмотрим, является ли значение поля нулевым.

2. Настройка

Единственная настройка, которая нам нужна, — это создать простой класс POJO: