Spring Boot整合Jersey开发RESTful服务

本文整理一下在Spring Boot中整合Jersey实现RESTful接口的开发。

最官方的,当然是Spring Boot的官方文档, 官方文档中关于整合Jersey的说明

我们主要关注如下步骤

To get started with Jersey, include the spring-boot-starter-jersey as a dependency 

想要在Spring Boot中使用Jersey首先需要引入Jersey支持,坐标如下(我的项目是基于2.2.1.RELEASE构建的):

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jersey</artifactId>
    <version>2.2.1.RELEASE</version>
</dependency>
and then you need one @Bean of type ResourceConfig in which you register all the endpoints, as shown in the following example:

引入依赖之后,需要定义一个ResourceConfig资源配置,并且将需要对外暴露为RESTful接口的方法所在的类注册给jersey

@Component
public class JerseyConfig extends ResourceConfig {

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

JerseyConfig继承了ResourceConfig,在构造中对Endpoint进行了注册,Endpoint为对外暴露RESTful接口的实现类。

这里需要注意的是,jersey无法通过扫描package的方式扫描可执行jar以及WEB-INF/classs中的包中的endpoints。解决方法也很直接,避免使用package方法进行扫描,改为对每个endPoint类单独进行注册,也就是上面提到的这种方式。 这里想表达的是,ResourceConfig.register方法支持链式调用,我们可以一次性将所有需要对外暴露的endPoint类都注册给ResourceConfig

For more advanced customizations, you can also register an arbitrary number of beans that implement ResourceConfigCustomizer.

官网在这里补充到,我们还可以通过实现ResourceConfigCustomizer接口从而实现endPoint资源的注入,一个样例如下:

@Component
public class DemoResourceConfigCustomizer implements ResourceConfigCustomizer {
    @Override
    public void customize(ResourceConfig config) {
        config.register(SpringbootResource.class);
    }
}

这里我建立了一个实现ResourceConfigCustomizer接口的配置类DemoResourceConfigCustomizer,实现它的回调方法customize,通过ResourceConfig.register同样实现了资源的注册。

All the registered endpoints should be @Components with HTTP resource annotations (@GET and others), as shown in the following example:

完成前面的整合,进入了最为关键的阶段,官网告诉我们,每一个注册的endPoint都应该是一个Spring的bean(标注了@Component,@Service等注解,声明为一个Spring的bean),并且需要在类上,方法上标注javax.ws.rs注解,如: @GET、@Path等

到此我们就完成了基本的Jersey整合Spring Boot的操作,启动应用,通过@Path声明的路径调用我们的接口即可。

来看一个最简单的endPoint代码样例,我直接引用官方的代码样例:

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

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

}

对于使用过SpringMVC的开发者,这段代码就很亲切了,它其实就类似于SpringMVC中的controller。

总的来说,还是比较简单直观的,习惯了使用SpringMVC之后,换一种开发方式也不失为一种新的体验,更重要的,Jersey框架不仅实现了JAX-RS规范,还提供了自有API以扩展JAX-RS, 它作为官方的实现是值得我们去学习的。

版权声明:

原创不易,洗文可耻。除非注明,本博文章均为原创,转载请以链接形式标明本文地址。

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章