Spring Boot: JAX-RS и Jersey

Если вы предпочитаете модель программирования JAX-RS для конечных точек REST, вы можете использовать одну из доступных реализаций вместо Spring MVC. Jersey и Apache CXF работают достаточно хорошо из коробки. CXF требует, чтобы вы зарегистрировали его сервлет или фильтр как @Bean в контексте вашего приложения. Jersey имеет некоторую встроенную поддержку Spring, поэтому также предоставляется поддержка автоконфигурации в Spring Boot вместе со стартером.

Чтобы начать работу с Jersey, включите в качестве зависимости spring-boot-starter-jersey, а затем вам нужен один @Bean типа ResourceConfig, в котором вы зарегистрируете все конечные точки, как показано в следующем примере:

@Component
public class JerseyConfig extends ResourceConfig {

    public JerseyConfig() {
        register(Endpoint.class);
    }

}

Поддержка Jersey сканирования исполняемых архивов довольно ограничена. Например, он не может сканировать конечные точки в пакете, найденном в полностью исполняемом jar-файле или в WEB-INF/classes, при запуске исполняемого файла war. Чтобы избежать этого ограничения, метод packages не должен использоваться, и конечные точки должны регистрироваться индивидуально с помощью метода register, как показано в предыдущем примере.

Для более сложных настроек вы также можете зарегистрировать произвольное количество bean-компонентов, которые реализуют ResourceConfigCustomizer.

Все зарегистрированные конечные точки должны быть @Components с аннотациями ресурсов HTTP (@GET и другие), как показано в следующем примере:

@Component
@Path("/hello")
public class Endpoint {

    @GET
    public String message() {
        return "Hello";
    }

}

Поскольку конечной точкой является Spring @Component, его жизненный цикл управляется Spring, и вы можете использовать аннотацию @Autowired для внедрения зависимостей и использовать аннотацию @Value для внедрения внешней конфигурации. По умолчанию сервлет Jersey зарегистрирован и сопоставлен с /*. Вы можете изменить отображение, добавив @ApplicationPath к вашему ResourceConfig.

По умолчанию Jersey настроен как сервлет в @Bean типа ServletRegistrationBean с именем jerseyServletRegistration. По умолчанию сервлет инициализируется лениво, но вы можете настроить это поведение, установив spring.jersey.servlet.load-on-startup. Вы можете отключить или переопределить этот компонент, создав свой собственный с тем же именем. Вы также можете использовать фильтр вместо сервлета, установив spring.jersey.type=filter (в этом случае @Bean для замены или переопределения - это jerseyFilterRegistration). Фильтр имеет @Order, который вы можете установить с помощью spring.jersey.filter.order. И сервлету, и регистрации фильтра могут быть заданы параметры инициализации с помощью spring.jersey.init.*, чтобы указать карту свойств.


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


Комментарии

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

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

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

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