Spring Boot集成Jersey

背景

由于近期协助其他项目组进行改造,在改造过程中,发现对方代码中有一些不太明白的地方,一直没有使用过,如下:
在这里插入图片描述
由于没有接触过这种类似结构,改造起来毫无头绪,所以百度一下。。

概述

java.ws.rs是jax-rs规范中定义的包名
jax-rs全称Java API for RESTful Services
jax-rs规范目前版本是2.0规范文档
jax-rs中定义了
一组启动方式 (以jee作为http容器 还是配合servlet作为http容器)
一组注解@GET, @POST, @DELETE, @PUT, @Consumes … 通过 POJO Resource类 提供Rest服务.

如JSR规范定义Servlet是以继承HttpServlet 并重写doGet doPost do…方法一样 遵循这套标准都可以称为Servlet 写的Servlet程序 可以不经过任何修改放到任何实现Servlet容器中运行 写的jax-rs程序可以不经任何修改和任何jax-rs框架配合使用 而Spring MVC是以Servlet为http容器 并自己构建了一套Api没有遵循jax-rs规范

目前实现jax-rs标准的框架有很多

1、Apache CXF开源的Web服务框架
2、Jersey 由Sun提供的JAX-RS的参考实现
3、RESTEasy JBoss的实现
4、Restlet 由Jerome Louvel和Dave Pawson开发 是最早的REST框架 先于JAX-RS出现
5、Apache Wink 一个Apache软件基金会孵化器中的项目 其服务模块实现JAX-RS规范

既然是Java API for RESTful Services,那自然而然就想到现在比较火爆的springboot,一看资料果然可以集成兼容,选择了Jersey 作为集成对象,走起~

Spring Boot集成Jersey

1、引入依赖

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jersey</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

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

2、编写配置类

@Component
public class JerseyConfig extends ResourceConfig {

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

JerseyConfig继承了ResourceConfig,在构造中对Endpoint进行了注册,Endpoint为对外暴露RESTful接口的实现类。
ps:ResourceConfig.register方法支持链式调用,我们可以一次性将所有需要对外暴露的endPoint类都注册给ResourceConfig。
3、编写实现类

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

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

}

官网告诉我们,每一个注册的endPoint都应该是一个Spring的bean(标注了@Component,@Service等注解,声明为一个Spring的bean),并且需要在类上,方法上标注javax.ws.rs注解,如:@GET、@Path等。

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

4、测试

浏览器请求http://localhost:8080/hello,查看结果:
在这里插入图片描述
总的来说,还是比较简单直观的,习惯了使用SpringMVC之后,换一种开发方式也不失为一种新的体验,更重要的,Jersey框架不仅实现了JAX-RS规范,还提供了自有API以扩展JAX-RS, 它作为官方的实现是值得我们去学习的。

拓展:
除了JerseyConfig。我们还可以通过实现ResourceConfigCustomizer接口从而实现endPoint资源的注入:

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值