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, 它作为官方的实现是值得我们去学习的。
参考资料
Jersey 开发RESTful(十八) Springboot集成Jersey
版权声明:
原创不易,洗文可耻。除非注明,本博文章均为原创,转载请以链接形式标明本文地址。