jax-rs jax-ws_快速浏览JAX-RS请求与方法匹配

jax-rs jax-ws

在本文中,我们来看一下JAX-RS中与资源方法匹配HTTP请求 。 它是JAX-RS的最基本功能之一。 通常,使用JAX-RS API的开发人员不会接触(或真正不需要知道) 匹配过程的细节,请放心,由于我们的RESTful,JAX-RS运行时会在后台悄悄地推出其算法。客户端保持那些HTTP请求的到来!

万一术语请求资源方法匹配对您来说是陌生的–就是JAX-RS提供程序通过它向您的资源类之一(使用@Path装饰)的特定方法分配HTTP请求的过程。 可以使用JAX-RS规范文档来详细解释这一点( 不过,在本文中,我们将仅介绍冰山一角!

主要标准

在请求匹配过程中要考虑哪些因素?

  • HTTP请求URI
  • HTTP请求方法(GET,PUT,POST,DELETE等)
  • HTTP请求的媒体类型
  • 请求的响应的媒体类型

高级步骤

粗略的图表应该会有所帮助。 在此之前,这里是示例场景

  • 两个资源类 – Books.java,Movies.java
  • Books.java中的资源方法路径 – / books /,/ books / {id}(URI路径参数),/ books?{isbn}(URI查询参数)
  • HTTP请求URI – / books?isbn = xyz

谁会赢 ?

@Path("books")
public class Books{@Produces("application/json")@GETpublic List<Book> findAll(){//find all books}@Produces("application/json")@GET@Path("{id}")public Book findById(@PathParam("id") String bookId){//find book by id e.g. /books/123}@Produces("application/json")@GETpublic Book findByISBN(@QueryParam("isbn") String bookISBN){//find book by ISBN e.g. /books?isbn=xyz}
}
@Path("movies")
public class Books{@Produces("application/json")@GETpublic List<Movie> findAll(){//find all movies e.g. /movies/}@Produces("application/json")@GET@Path("{name}")public Movie findById(@PathParam("name") String name){//find movie by name e.g. /movies/SourceCode}
}

jaxrs_matching_process

JAX-RS请求方法匹配过程

分解正在发生的事情

  • 将可能匹配的候选对象缩小到一组资源类

这是通过将HTTP请求URI与资源类上@Path注释的值进行匹配来完成的

  • 从上一步的资源类集中,找到一组可能匹配的候选方法(将算法应用于过滤后的资源类集)
  • 归结为可以处理HTTP请求的确切方法

将HTTP请求谓词与HTTP方法特定的注释(@ GET,@ POST等)进行比较,将Content-Type标头指定的请求媒体类型与@Consumes注释中指定的媒体类型以及指定的响应媒体类型进行比较将Accept标头中的“首选项”与@Produces批注中指定的媒体类型进行比较

我强烈建议您查看org.glassfish.jersey.server.internal.routing包中实现类的Jersey服务器端逻辑 ,以加深了解。 您可以查看的一些类/实现是

  • MatchResultInitializerRouter
  • SubResourceLocatorRouter
  • 方法选择路由器
  • 路径匹配路由器

是时候挖了……。?

祝您黑客愉快!

翻译自: https://www.javacodegeeks.com/2015/03/quick-peek-at-jax-rs-request-to-method-matching.html

jax-rs jax-ws

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338140.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言知识总结——宏,枚举

1、define宏定义以#号开头的都是编译预处理指令&#xff0c;它们不是C语言的成分&#xff0c;但是C程序离不开它们&#xff0c;#define用来定义一个宏&#xff0c;程序在预处理阶段将用define定义的来内容进行了替换。因此在程序运行时&#xff0c;常量表中并没有用define定义的…

C语言知识总结——共用体

union 共用体&#xff08;联合体&#xff09;在进行某些算法的C语言编程的时候&#xff0c;需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术&#xff0c;几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构&#xff0c;在C语言中 以关键字union…

jboss入门_JBoss Forge NetBeans集成–入门

jboss入门JBoss Forge是构建基于Maven的Java EE项目的最快方法。 因此&#xff0c;它已经具有了令人敬畏的功能&#xff0c;使您作为开发人员的生活更加轻松。 在大多数情况下&#xff0c;使用Forge的人们可能会对创建Web应用程序感兴趣。 有很多方法可以开始使用Forge基础知识…

这几道 C/C 题涉及你的知识盲区?

8个C语言面试题&#xff0c;涉及指针、运算、函数、内存&#xff0c;看看你能做出几个&#xff01;1.gets()函数问&#xff1a;请找出下面代码里的问题&#xff1a;#include int main(void) {char buff[10];memset(buff, 0, sizeof(buff));gets(buff); //gets不检查输入的字符…

logback redis_使用Spring Boot和Logback登录到Redis

logback redis在进行集中式日志记录时&#xff0c;例如使用Elasticsearch&#xff0c;Logstash和Kibana或Graylog2&#xff0c;您可以为Java应用程序提供多个选项。 您既可以编写标准的应用程序日志&#xff0c;也可以使用Logstash解析这些日志&#xff0c;这些日志既可以直接使…

C 与 C 的真正区别在哪里?

C 与 C 的真正区别在哪里&#xff1f;C是中餐厨师的菜刀&#xff0c;做啥菜就那一把刀&#xff0c;切菜切肉切鱼&#xff0c;都是这一把刀&#xff0c;刀工好的师傅&#xff0c;豆腐都能切成一朵花。无论你提什么概念&#xff0c;都能用指针给你做出来&#xff0c;如果不行&…

html 怎么置顶表格,表格(Table)表头固定,内容上滚【5个实例】

当表格往上滚动的时候&#xff0c;表头固定不动&#xff0c;这样可以让用户时刻看清每一列的数据含义&#xff0c;这是人性化的设计&#xff0c;充分考虑了用户使用体验。本文将通过5个实例&#xff0c;来介绍这种表格设计。用户可通过下载源码&#xff0c;直接应用于自己的项目…

C语言变量的定义包括变量存储类型和变量的什么?

C语言变量的定义包括变量存储类型和变量的名称。C语言定义变量的格式&#xff1a;“数据类型 变量名;”&#xff0c;“数据类型”表示想要存储什么类型的数据&#xff0c;“变量名”就是你想给这个变量起个什么名字&#xff0c;通常都是用字母。变量的定义定义变量的格式非常简…

C语言代码注释必须用/**/ , 你没看错~

事情是这样的&#xff0c;有人离职&#xff0c;公司调我补缺。那个系统一直有个工程师在维护&#xff0c;参与该系统的新人来了又走&#xff0c;他始终泰然自若。刚过去一个礼拜&#xff0c;我就心下窃吼&#xff1a;“坑爹啊!”&#xff0c;也彻底体会到什么叫---绝对的权威、…

html文档的基本类型,HTML(网页的文档类型介绍)

一个html文件的第一行代码通常就是用于声明网页文档类型&#xff0c;其格式是:这一行不是属于标签文档类型:可以理解为不同的html版本&#xff01;html4.0 或4.01版本基本固定&#xff0c;但又有分化:严格性:了用的标签和属性相对较少&#xff0c;但能兼容更多的浏览器。宽松型…

C语言源代码展示:常用转换函数实现原理

编程时经常用到进制转换、字符转换。比如软件界面输入的数字字符串&#xff0c;如何将字符串处理成数字呢&#xff1f;和大家分享一下。01字符串转十六进制代码实现&#xff1a;void StrToHex(char *pbDest, char *pbSrc, int nLen) {char h1,h2;char s1,s2;int i;for (i0; i …

html5 移动 优化,第四天:HTML5移动站优化技巧 摘自《10天学会移动站SEO》

现在大家基本上做手机网站都是做成HTML5的&#xff0c;因为现在智能手机等移动设备越来越多&#xff0c;几乎全部支持HTML5&#xff0c;那么给网站适配上HTML5的网站就很是必要了。以前的WML网站已经淘汰&#xff0c;而最新的方式就这种最好。我们这一节就重点讲一讲HTML5移动网…

c语言中switch的用法是什么?

c语言中switch的用法是&#xff1a;功能&#xff1a;switch语句是多分支选择语句.用来实现多分支选择结构.if语句只有两个分支可供选择,而实际问题中常常要用到多分支的选择.例如,学生成绩分类(90为"A"等,80-89分为B等,70-90分为C等......).当然这些都可以用嵌套的if…

C语言“fread”函数的用法?

C语言“fread”函数的用法为“size_tf read(void *buffer,size_t size,size_t count,FILE *stream)”&#xff0c;其作用是从一个文件流中读数据&#xff0c;读取count个元素&#xff0c;每个元素size字节。示例1#include #include #include int main(){ FILE *stream; c…

html怎么设置数据条的颜色,jQuery EasyUI 数据网格 – 条件设置行背景颜色 | 菜鸟教程...

jQuery EasyUI 数据网格 - 条件设置行背景颜色本教程将向您展示如何根据一些条件改变数据网格(datagrid)组件的行样式。当 listprice 值大于 50 时&#xff0c;我们将为该行设置不同的颜色。数据网格(datagrid)的 rowStyler 函数的设计目的是允许您自定义行样式。以下代码展示如…

C语言中for语句的执行过程是什么?

C语言中for语句的执行过程是&#xff1a;for语句的一般形式为&#xff1a;for&#xff08;单次表达式;条件表达式;末尾循环体&#xff09;{中间循环体&#xff1b;}。for循环执行时&#xff0c;会先判断条件表达式是否成立&#xff0c;如果条件成立则执行中间循环体&#xff0c…

c语言getch()的用法是什么?

C语言中getch()函数功 能&#xff1a; 从stdio流中读字符&#xff0c;即从控制台读取一个字符&#xff0c;但不显示在屏幕上用 法:int getchar(void);这个函数是一个不回显函数&#xff0c;当用户按下某个字符时&#xff0c;函数自动读取&#xff0c;无需按回车&#xff0c;有的…

淮安中专学计算机哪个学校好,2021淮安初中十强排名 哪些初中比较好

对于淮安的学生来说&#xff0c;了解淮安初中排名会更有利于选择初中。那么&#xff0c;2021淮安初中十强有哪些学校呢?下面小编整理了一些相关信息&#xff0c;供大家参考!2021淮安十大初中排名1、淮安兴隆中学2、淮安郑梁梅中学华禹分校3、淮安高堰九年制学校4、淮安长江路中…

C 隐式类型转换是什么?

C 隐式类类型转换《C Primer》中提到&#xff1a;“可以用 单个形参来调用 的构造函数定义了从 形参类型 到 该类类型 的一个隐式转换。”这里应该注意的是&#xff0c; “可以用单个形参进行调用” 并不是指构造函数只能有一个形参&#xff0c;而是它可以有多个形参&#xff0…

文科女生单招学计算机,文科女生走单招学什么专业好

对于文科女生来说&#xff0c;想要走高职单招选择什么专业好呢?有哪些专业适合文科女生来学习呢?有途网小编为大家整理了一些专业。语言类专业对于高职单招的专业来说&#xff0c;如今的社会发展对于纯中文的专业并不看好&#xff0c;所以说如果文科女生想要学习语言类高职单…