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请求了,也能实现兼容

如何在SpringBoot项目中兼容Jersey和SpringMVC框架?的更多相关文章

  1. springboot(五).如何在springboot项目中使用拦截器

    在每个项目中,拦截器都是我们经常会去使用的东西,基本上任一一个项目都缺不了拦截器的使用. 如日志记录.登录验证,session验证等,都需要拦截器来拦截URL请求,那springboot中的拦截器是如 ...

  2. 如何在SpringBoot项目中使用拦截器

    相比springmvc,springboot中拦截器不需要在xml中配置,只需定义拦截器类 implements HandlerInterceptor 和拦截器拦截路径的配置类extends WebM ...

  3. 如何在 SpringBoot 项目中接入 ChartGPT

    大家好,我是公子骏.最近体验了火爆全网的 ChartGPT,深刻体会了其强大的能力,这让我们程序猿对AI的未来突然有了广大的畅想空间. 我也在网上看到不少大牛通过 ChartGPT 来获取收益,就寻思 ...

  4. 如何在springboot项目中进行XSS过滤

    简单介绍 XSS : 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意 ...

  5. 五分钟后,你将学会在SpringBoot项目中如何集成CAT调用链

    买买买结算系统 一年一度的双十一购物狂欢节就要到了,又到剁手党们开始表演的时刻了.当我们把种草很久的商品放入购物车以后,点击"结算"按钮时,就来到了买买买必不可少的结算页面了.让我 ...

  6. 后端分页神器,mybatis pagehelper 在SSM与springboot项目中的使用

    mybatis pagehelper想必大家都耳熟能详了,是java后端用于做分页查询时一款非常好用的分页插件,同时也被人们称为mybatis三剑客之一,下面 就给大家讲讲如何在SSM项目和sprin ...

  7. [Laravel-Swagger]如何在 Laravel 项目中使用 Swagger

    如何在 Laravel 项目中使用 Swagger http://swagger.io/getting-started/ 安装依赖 swagger-php composer require zirco ...

  8. 如何在cocos2d项目中enable ARC

    如何在cocos2d项目中enable ARC 基本思想就是不支持ARC的代码用和支持ARC的分开,通过xcode中设置编译选项,让支持和不支持ARC的代码共存. cocos2d是ios app开发中 ...

  9. 如何在NodeJS项目中优雅的使用ES6

    如何在NodeJS项目中优雅的使用ES6 NodeJs最近的版本都开始支持ES6(ES2015)的新特性了,设置已经支持了async/await这样的更高级的特性.只是在使用的时候需要在node后面加 ...

  10. 如何在VUE项目中添加ESLint

    如何在VUE项目中添加ESLint 1. 首先在项目的根目录下 新建 .eslintrc.js文件,其配置规则可以如下:(自己小整理了一份),所有的代码如下: // https://eslint.or ...

随机推荐

  1. 本地插件文件导入cordova 项目中

    cordova plugin add F:\ucc\android\cordova-plugin-datepicker add 后面是插件文件的本地地址

  2. TortoiseGit自动保存用户名和密码

    在使用TortoiseGit上传时,会多次提示输入用户名和密码,采用以下方法解决 1.桌面点击右键 -> 选择TortoiseGit -> 点击settings 2.点击选择Git 3.点 ...

  3. python之tk学习,闲鱼搜索-小记

    (如想转载,请联系博主或贴上本博地址) 编程,逻辑,总是让人如痴如醉. 下面进入正题. 火热的天气配上火热的python,python的入门友好性让门外汉们都看到了希望.当然自己写的程序如果没有GUI ...

  4. bootstrapv4轮播图去除两侧阴影及线框

    一.前提条件:  在使用bootstrap v4中的轮播图组件时,两侧默认出现阴影,且轮播组件示例不一致! 二.bootstrap文档组件展示与实际应用 1.官方文档展示如下:没有阴影 2.实际应用情 ...

  5. 学习记录--C++作业3

    1.类是一个模板吗? 是:类模板是一个抽象的类,代表类的一般特性,可以用类模板来创建类,所有的类都有共有的特性. 4.函数模板的实例化是什么? 模板函数,即函数 3.关于cin和cout说法正确的: ...

  6. mysql 不包含某个字符

    转载网址: https://blog.csdn.net/mp624183768/article/details/121696040?utm_medium=distribute.pc_relevant. ...

  7. java 中文繁简体转换工具 opencc4j 使用介绍 1.8.0

    Opencc4j Opencc4j 支持中文繁简体转换,考虑到词组级别. 在线体验 Features 特点 严格区分「一简对多繁」和「一简对多异」. 完全兼容异体字,可以实现动态替换. 严格审校一简对 ...

  8. Stream 未释放系统资源问题处理

    Unreleased Resource: Streams Abstract 程序可能无法成功释放某一项系统资源. Explanation 程序可能无法成功释放某一项系统资源. 资源泄露至少有两种常见的 ...

  9. 声网Agora发布教育信息化解决方案 助力教育公平提效

    4月23日-25日,由中国教育装备行业协会主办的第79届教育装备展在厦门国际会展中心举办.作为赋能教育信息化的实时互动PaaS服务商,声网Agora应邀参会.展会现场,声网展示了基于实时音视频互动能力 ...

  10. ChatGPT|一文读懂GPT-4!

    前言 大家好,今天早上一早醒来,发现各大科技圈公众号平台开始刷屏OpenAI发布的新模型GPT4.0,看这个版本号就已经知道又是一大波特性的更新. 于是立马起来开始学习! GPT-4 发布视频(202 ...