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

以防万一,术语“ 请求资源方法匹配”对您来说是陌生的–它不过是JAX-RS提供程序将HTTP请求分派到您的资源类之一的特定方法(使用@Path装饰)的过程。 可以使用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}
}

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请求与方法匹配相关推荐

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

    jax-rs jax-ws 在本文中,我们来看一下JAX-RS中与资源方法匹配的HTTP请求 . 它是JAX-RS的最基本功能之一. 通常,使用JAX-RS API的开发人员不会接触(或真正不需要知道 ...

  2. Zen Coding: 一种快速编写HTML/CSS代码的方法

    译自:Smashing Magazine 中文:Zen Coding: 一种快速编写HTML/CSS代码的方法 请尊重版权,转载请注明来源! 在本文中我们将展示一种新的使用仿CSS选择器的语法来快速开 ...

  3. jax rs mysql_liferay7-rest开发JAX-RS规范详解

    简介 JAX-RS (JSR-311) 是为 Java EE 环境下的 RESTful 服务能力提供的一种规范.它能提供对传统的基于 SOAP 的 Web 服务的一种可行替代. 在本文中,了解 JAX ...

  4. 一种快速的公交专用车道检测方法

    一种快速的公交专用车道检测方法 关键词:公交车,车道线检测,摄像头 时间:2012-09-19 15:56:48      来源:中电网 目前,国内外学者已经提出了很多车道线检测算法,主要分为两类:一 ...

  5. 1、excel常用技能(数据分列、数据快速浏览、转置、选择性粘贴运算、绘制对角线、单元格内换行、插入注解文字或图片)

    (1)将同一列中的数据分为不同类型的数据列 选中需要分列的数据单元格,选择工具栏中的"数据.分列.分隔符号.下一步.选择分隔符号(本例中是选中空格).下一步.完成". (2)将姓和 ...

  6. JS快速获取图片宽高的方法

    JS快速获取图片宽高的方法 快速获取图片的宽高其实是为了预先做好排版样式布局做准备,通过快速获取图片宽高的方法比onload方法要节省很多时间,甚至一分钟以上都有可能,并且这种方法适用主流浏览器包括I ...

  7. android studio 自动生成对象,在Android Studio中快速导入可绘制对象的方法?

    在Android Studio中快速导入可绘制对象的方法? 在Android项目中的某个时候,您将需要在res/drawable目录中导入一些可绘制对象-工具栏图标,图像,UI功能. 大多数情况下,您 ...

  8. 使用 Ocelot 匹配路由的方法匹配路由

    使用 Ocelot 匹配路由的方法匹配路由 Intro 之前我们在 Ocelot 网关的基础上自定义了一个认证授权的 Ocelot 中间件,根据请求的路径和 Method 进行匹配,找到对应的权限配置 ...

  9. aop统计请求数量_使用SpringAOP获取一次请求流经方法的调用次数和调用耗时

    引语### 作为工程师,不能仅仅满足于实现了现有的功能逻辑,还必须深入认识系统.一次请求,流经了哪些方法,执行了多少次DB操作,访问了多少次文件操作,调用多少次API操作,总共有多少次IO操作,多少C ...

最新文章

  1. 三代测序之全长转录本
  2. go标准库的学习-sync互斥
  3. zuul框架设计与实现
  4. 深度研究 | 区块链在征信业的应用探讨:切中了痛点,但也面临四大挑战
  5. App自动化测试之Adb基础命令使用
  6. Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作
  7. liunx系统不能登陆的问题
  8. php 解压dat,电脑微信dat文件怎么打开
  9. Oracle数据到MaxCompute乱码问题详解
  10. 备战双 11!蚂蚁金服万级规模 K8s 集群管理系统如何设计?
  11. jvm内存模型和java内存模型_JVM运行时内存模型综述
  12. 在线闹钟html代码复制,html5时钟实现代码
  13. linux 755 777是什么权限,linux系统下644、755、777权限详解
  14. install texlive-full on ubuntu
  15. 简述tcp协议三报文握手过程_TCP协议的3次握手与4次挥手过程详解
  16. Linux4755文件权限,如何在Linux中管理文件和文件夹的权限
  17. pdf虚拟打印机免费版使用教程
  18. 供应商层次分析法判断矩阵(文末附软件)
  19. 动作捕捉协助中国电力科学研究院建立边云协同电力自主巡检系统
  20. Unity世界坐标转换屏幕坐标(概览)

热门文章

  1. hibernate多对多、正向工程创建数据表——访问温馨提示
  2. Redis(案例六:ZSet数据)
  3. Android隐藏状态栏和标题栏
  4. android merge的作用,Android学习手记-merge
  5. expect() php,Linux expect 的安装
  6. mysql id生成器自定义_MybatisPlus使用自定义Id生成器数据自动填充
  7. java虚拟机的内存模型_JVM(Java虚拟机)内存模型(转载/整理)
  8. java多表查询返回数据_spring data jpa如何在多张数据库表中查询返回某些字段值?...
  9. 如何将网页部署到maven_如何通过Rultor将Maven工件部署到CloudRepo
  10. drools 执行函数_Drools可执行模型还活着