如何在SpringBoot项目中兼容Jersey和SpringMVC框架?


REST(Representational State Transfer)表象化状态转变(表述性状态转变),在2000年被提出,基于HTTP、URI、XML、JSON等标准和协议,支持轻量级、跨平台、跨语言的架构设计。是Web服务的一种新的架构风格(一种思想)。

Jersey框架介绍

Jersey RESTful WebService框架是一个开源的、产品级别的JAVA框架,支持JAX-RS API并且是一个JAX-RS(JSR 311和 JSR 339)的参考实现

JAX-RS 是用于快速开发 REST 应用程序的 Java API。 虽然 JAX-RS 提供了比 Servlet 更快速的 Web 应用程序开发方法,但JAX-RS 的主要目标是构建 RESTful 服务。

Jersey框架也提供了自己的API,提供了很多的特性和功能

常用的注解:

@Path 用于定义路径和URI,类型SpringMVC的RequestMapping,用来定位请求路径的。

@PathParam 用来把请求URL中的参数传入方法中,比如:/student/{id},这个注解可以用来获取路径上的id。

@GET @POST @PUT @DELETE 这些注解呢主要用于定义HTTP请求的类型。

@Consumes 可以定义请求的媒体类型

@Produces 定义响应媒体类型

@QueryParam 主要用于在URL上获取数据,常用于GET方法多

@HeaderParam 主要用于获取HTTP头部的数据

@FormParam 主要用于接收表单数据****

@Context 可以注入HttpServletRequest,HttpSession等特殊对象

SpringBoot中SpringMVC兼容Jersey

有人可能会问,SpringMVC挺好用的,我用的挺熟练的,为什么还需要使用Jersey框架呢?显而易见,Jersey框架在一些老一点项目中还是会有用到的,一些架构稍微老一点的公司就可能会需要进行框架的升级,必然需要兼容一些老的框架,因此也就需要进行解决,解决方案也不难,我们可以将两种API分开来,比如我们用两个前缀路径来区分这两种API,或者采用两个独立的项目来进行部署

这里我们就演示第一种:

整合Jersey

SpringBoot项目可以通过引入starter的形式,我这里采用的是2.7.2的SpringBoot版本

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-jersey</artifactId>
</dependency>

添加完依赖后,我们可以写一个控制器,我这里就写一个HelloController

@Path("/hello")
public class HelloController {

    @GET
    @Path("/hello")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public String hello(@Context HttpServletRequest request) {
        System.out.println(request.getRequestURI());
        System.out.println("request");
        return "Hello World!";
    }
}

那写了这个还不能成功,还需要配置一个Jersey框架的配置类,并将这个Controller注册一下,这里也支持packages包扫描的方式。

@Configuration
@ApplicationPath("/jersey")
@Component
public class JerseyConfig extends ResourceConfig {

    public JerseyConfig() {
        register(HelloController.class);
        // packages("com.dy.demo.controller");
    }
}

细心的小伙伴会发现上面有一个ApplicationPath,这个注解是Jersey提供的,主要用于区分是采用MVC还是这个框架的,相当于上面的这个hello接口的路径就会变成/jersey/hello/hello,然后MVC不进行配置的话就默认是/,当然也可以配置,可以在application.yaml中配置,这样是第一种解决方案,看起来还是比较优雅的,

spring:
  application:
    name: HelloWorld
  mvc:
    servlet:
      path: /api

jersey框架的请求测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8993GZrK-1679922463510)(C:\Users\DY\AppData\Roaming\marktext\images\2023-03-27-20-56-10-image.png)]
MVC的请求测试

在这里插入图片描述

有人可能会疑惑,我肯定是从jersey框架更新到MVC框架呀,如果直接从jersey框架更新到这个MVC框架,确实是没有办法兼容的,但是如果想上面那样配置MVC的请求路径就可以区分出MVC请求了,也能实现兼容。

,我肯定是从jersey框架更新到MVC框架呀,如果直接从jersey框架更新到这个MVC框架,确实是没有办法兼容的,但是如果想上面那样配置MVC的请求路径就可以区分出MVC请求了,也能实现兼容👍👍👍

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值