Spring Boot Actuator: реализация пользовательских веб конечных точек

Пользовательские веб конечные точки

Операции над @Endpoint, @WebEndpoint или @EndpointWebExtension автоматически предоставляются через HTTP с использованием Jersey, Spring MVC или Spring WebFlux. Если доступны как Jersey, так и Spring MVC, будет использоваться Spring MVC.

Предикаты запроса веб конечной точки

Предикат запроса генерируется автоматически для каждой операции в конечной точке, доступной через веб.

Путь

Путь предиката определяется идентификатором конечной точки и базовым путем открытых конечных точек. Базовый путь по умолчанию - /actuator. Например, конечная точка с идентификаторами sessions будет использовать /actuator/sessions в качестве своего пути в предикате.

Путь может быть дополнительно настроен путем аннотирования одного или нескольких параметров метода операции с помощью @Selector. Такой параметр добавляется к предикату пути как переменная пути. Значение переменной передается в метод операции при вызове операции конечной точки. Если вы хотите захватить все оставшиеся элементы пути, вы можете добавить @Selector(Match=ALL_REMAINING) к последнему параметру и сделать его типом, совместимым по преобразованию со String[].

HTTP метод

Метод HTTP предиката определяется типом операции, как показано в следующей таблице:

Операция HTTP метод
@ReadOperation GET
@WriteOperation POST
@DeleteOperation DELETE

Условие consumes предиката

Для @WriteOperation (HTTP POST), который использует тело запроса, условие consumes предиката - это application/vnd.spring-boot.actuator.v2+json, application/json. Для всех других операций условие consumes является пустым.

Условие produces предиката

Условие produces для предиката может быть определено с помощью атрибута produces аннотаций @DeleteOperation, @ReadOperation и @WriteOperation. Атрибут необязательный. Если он не используется, условие produces определяется автоматически.

Если метод операции возвращает void или Void, то условие produces пустое. Если метод операции возвращает org.springframework.core.io.Resource, то условие produces равно application/octet-stream. Для всех других операций условие produces является application/vnd.spring-boot.actuator.v2+json, application/json.

Статус ответа веб конечной точки

Статус ответа по умолчанию для операции конечной точки зависит от типа операции (чтение, запись или удаление) и от того, что, если вообще что-то, возвращает операция.

@ReadOperation возвращает значение, статус ответа будет 200 (ОК). Если он не возвращает значение, статус ответа будет 404 (Not Found).

Если @WriteOperation или @DeleteOperation возвращает значение, статус ответа будет 200 (ОК). Если он не возвращает значение, статус ответа будет 204 (No Content).

Если операция вызывается без обязательного параметра или с параметром, который не может быть преобразован в требуемый тип, метод операции не будет вызван, и статус ответа будет 400 (Bad Request).

Запросы диапазона веб конечных точек

Запрос диапазона HTTP может использоваться для запроса части ресурса HTTP. При использовании Spring MVC или Spring Web Flux операции, которые возвращают org.springframework.core.io.Resource, автоматически поддерживают запросы диапазона.

Запросы диапазона не поддерживаются при использовании Jersey.

Безопасность веб конечных точек

Операция на веб конечной точке или конкретном веб расширении конечной точки может получить текущий параметр java.security.Principal или org.springframework.boot.actuate.endpoint.SecurityContext в качестве параметра метода. Первый обычно используется в сочетании с @Nullable, чтобы обеспечить различное поведение для аутентифицированных и не прошедших проверку пользователей. Последний обычно используется для проверки прав доступа с использованием метода isUserInRole(String).

Конечные точки сервлета

Сервлет может быть представлен как конечная точка путем реализации класса, аннотированного @ServletEndpoint, который также реализует Supplier<EndpointServlet>. Конечные точки сервлета обеспечивают более глубокую интеграцию с контейнером сервлета, но за счет портативности. Они предназначены для использования в качестве конечной точки для представления существующего сервлета. Для новых конечных точек аннотации @Endpoint и @WebEndpoint должны быть предпочтительнее, когда это возможно.

Конечные точки контроллера

@ControllerEndpoint и @RestControllerEndpoint можно использовать для реализации конечной точки, которая предоставляется только Spring MVC или Spring WebFlux. Методы отображаются с использованием стандартных аннотаций для Spring MVC и Spring WebFlux, таких как @RequestMapping и @GetMapping, причем идентификатор конечной точки используется в качестве префикса для пути. Конечные точки контроллера обеспечивают более глубокую интеграцию с веб фреймворками Spring, но за счет мобильности. Аннотации @Endpoint и @WebEndpoint должны быть предпочтительнее, если это возможно.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки