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