input发送a.jax_JAX-RS 2.0:服务器端处理管道
input发送a.jax
这篇文章的灵感来自JAX-RS 2.0规范文档 (附录C)中的Processing Pipeline部分。 我喜欢它的原因在于它提供了JAX-RS中所有模块的漂亮快照-以准备好吞咽的胶囊形式!
礼貌– JAX-RS 2.0规范文档
因此,我想到了使用此图简要概述不同的JAX-RS组件以及它们如何相互协调。
涵盖了什么?
- 过滤器(请求和响应)
- 方法匹配
- 注射
- 拦截器(请求和响应)
- 实体提供者(请求和响应)
注意:这里讨论的是服务器端处理管道,即在客户端发送HTTP请求(GET,POST,PUT等)之后触发的动作序列
当客户端(浏览器或自定义REST客户端)向您的RESTful服务发送HTTP请求时,一切就开始了!
请求过滤器(链)
客户端请求由JAX-RS过滤器处理。 它们适用于服务器端和客户端(我们将研究服务器端过滤器-基于请求和响应)
- 过滤器是可选组件,您可以通过简单地实现ContainerRequestFilter接口来编写过滤器。 需要使用@Provider批注对它们进行批注,以通过JAX-RS运行时自动检测
- 可以更改ContainerRequestContext的实例并更改标头,Cookie,URI等属性。过滤器不允许您访问HTTP请求正文/消息有效负载( 拦截器可以做到这一点)
- 可用于实现日志记录,身份验证等
- 如果需要在资源方法匹配之前执行过滤器实现类,请在实现类上使用@PreMatching批注。
- 过滤器可以(全局)绑定到所有JAX-RS方法,也可以使用@NamedBinding批注或DynamicFeature接口的实现有选择地绑定
- @Priority批注可用于确定多个过滤器(顺序链)的执行顺序。
方法匹配
在(成功)执行过滤器之后,JAX-RS运行时将启动资源方法匹配过程
- 调用的确切方法基于规范概述的算法 (尽管JAX-RS提供程序不受其约束)
- 由以下提到的注释的组合确定
- @ GET,@ PUT,@ POST,@ DELETE等–这些注释应与实际的HTTP操作匹配(注释到HTTP动词的映射非常明显)
- @Path –其值(相对于上下文根)用于映射请求URI,例如/ tweeters / all
- @Consumes –其值应与HTTP请求中发送的Content-Type标头值匹配
- @Produces –其值应与HTTP请求中发送的Accept标头值匹配
HTTP组件注入
方法匹配完成后,所需的HTTP组件将在JAX-RS运行时注入到JAX-RS资源类中(如果已配置)。 我们需要做的就是使用适当的注释
HTTP URI参数
- @QueryParam –从URI查询参数中提取值并将其注入,例如, http : //tweeter.com/info?tweeter = abhi_tweeter上的GET请求
- @PathParam –从URI模板参数中提取值并将其注入,例如在http://tweeter.com/info/tweeter/abhi_tweeter上的GET请求
- @MatrixParam –从URI矩阵参数中提取值并将其注入
其他HTTP组件
JAX-RS使访问(注入)HTTP请求组件(如标头,Cookie甚至HTTP表单数据)变得容易
- @HeaderParam –提取请求的标头。 您还可以使用@Context批注注入HttpHeaders实例
- @CookieParam –用于从HTTP请求中注入HTTP cookie
- @FormParam –可以帮助使用HTTP POST请求从通过HTML表单发送的属性中插入值
- @BeanParam –可以帮助在自定义域类的实例变量上使用上述所有与注入相关的注释,而不是使用这些注释将值注入各个方法参数
请求拦截器(链)
拦截器适用于服务器端和客户端(我们将仅查看服务器端拦截器-基于请求和响应)
- 拦截器有助于在处理HTTP请求有效负载之前对其进行突变
- 仅当在JAX-RS运行时中注册了MessageBodyReader (请参见下一主题)实现时,才调用请求拦截器。
- 用于传入服务器请求的拦截器由ReaderInterceptor接口的实现处理,并且需要使用@Provider注释进行注释,以通过JAX-RS运行时自动检测
- ReaderInterceptorContext实例在JAX-RS运行时传递,并且可以使用java.io.InputStream形式访问HTTP正文。
- 拦截器可以(全局)绑定到所有JAX-RS方法,也可以通过使用@NamedBinding批注或DynamicFeature接口的实现有选择地绑定
- 拦截器可以被链接和(使用@priority)和优先呼叫的继续进行的ReaderInterceptorContext的方法自动调用链中的或化MessageBodyReader实现本身下一个拦截
- ReaderInterceptor充当MessageBodyReader的包装器(在内部调用)
实体提供者(
实体提供者帮助将HTTP消息有效负载转换为适当的Java类型(用于注入到JAX-RS资源类的方法参数中),反之亦然
- HTTP请求有效负载到其对应的Java类型的转换是通过实现MessageBodyReader接口的具体类完成的
- MessageBodyReader实现的readFrom方法是执行操作的地方。 JAX-RS运行时会传入所有上下文信息,包括有效载荷本身(以InputStream的形式),然后可以对其进行自省并将其转换为适当的Java类型。
- JAX-RS规范要求,对于某些Java类型(例如String,InputStream,File等),实现应包含MessageBodyReader接口的现成实现。
响应过滤器(链)
响应过滤器类似于前面讨论的以请求为中心的过滤器。
- 响应过滤器是可选组件,您可以通过简单地实现ContainerResponseFilter接口来编写一个。
- 这些类型的过滤器用于修改响应标头,添加cookie等。可以更改ContainerResponseContext的实例并更改属性以实现此目的。 筛选器不允许您访问HTTP响应正文/消息有效负载( 拦截器可以执行此操作)
- 需要使用@Provider批注对它们进行批注,以通过JAX-RS运行时自动检测
- 过滤器可以(全局)绑定到所有JAX-RS方法,也可以使用@NamedBinding批注或DynamicFeature接口的实现有选择地绑定
- @Priority批注可用于确定多个过滤器(顺序链)的执行顺序。
响应拦截器(链)
- 仅当注册MessageBodyWriter (请参阅下一主题)以处理传出的HTTP有效负载时,才调用它们。
- 传出服务器响应的拦截器由类WriterInterceptor的实现处理,并且需要使用@Provider注释进行注释,以通过JAX-RS运行时自动检测
- 可以将拦截器进行链接和确定优先级(使用@Priority),并调用WriterInterceptorContext的proce方法会自动调用链中的下一个拦截器或MessageBodyWriter实现本身
- WriterInterceptor充当MessageBodyWriter的包装器(在内部调用)
实体提供者(
- 应用程序代码返回的Java对象到HTTP响应有效负载的转换是通过实现MessageBodyWriter接口的具体类完成的
- MessageBodyWriter实现的writeTo方法是执行操作的地方。 JAX-RS运行时将所有上下文信息与OutputStream一起传递给OutputStream ,从Java类型转换后,响应流可以写入该OutputStream。
- JAX-RS规范要求,对于某些Java类型(如String,InputStream,File等),实现应包含MessageBodyWriter接口的现成实现。
好吧! 这是对服务器端请求处理如何在JAX-RS中工作以及哪些组件起作用的相当简短的概述。 谢谢阅读。 干杯!
参考资料
- JAX-RS规格文件
- Java EE 7 API Java文档
翻译自: https://www.javacodegeeks.com/2015/01/jax-rs-2-0-server-side-processing-pipeline.html
input发送a.jax
input发送a.jax_JAX-RS 2.0:服务器端处理管道相关推荐
- input发送a.jax_Java EE 7 / JAX-RS 2.0:具有自定义HTTP标头的简单REST API身份验证和授权...
input发送a.jax 在使用已可用的HTTP协议实施Web服务时,REST带来了很多便利. 通过仅通过指定的URL触发GET,POST和其他HTTP方法,您将确保通过REST服务的响应来完成某些工 ...
- input发送a.jax_Java EE 7 / JAX-RS 2.0 – REST上的CORS
input发送a.jax Java EE REST应用程序在开箱即用的开发机器上通常可以很好地运行,在该机器上,所有服务器端资源和客户端UI都指向" localhost"或127. ...
- input发送a.jax_Java EE 7和JAX-RS 2.0
input发送a.jax 带有JAX-RS 2.0的Java EE 7带来了几个有用的功能,这些功能进一步简化了开发并导致创建了更加复杂但精简的Java SE / EE RESTful应用程序. 亚当 ...
- input发送a.jax_Java REST JAX-RS 2.0 –如何处理日期,时间和时间戳记数据类型
input发送a.jax 无论是X-Form-Urlencoded还是JSON HTTP发布到REST资源端点,对于与日期或时间相关的数据都没有特定的"数据类型". 大多数开发人员 ...
- input发送a.jax_JAX-RS 2.0:自定义内容处理
input发送a.jax 我试图想到一个更好的标题,但未能拿出一个! 请多多包涵--. JAX-RS 2.0规范允许我们无缝地将JAXB对象编组到HTTP请求/响应主体,或从HTTP请求/响应主体中解 ...
- input发送a.jax_JAX-RS 2.0中的透明PATCH支持
input发送a.jax PATCH方法是最不受欢迎的HTTP方法之一,因为直到最近才真正没有一种标准的PATCH格式. 一段时间以来,它已经针对JSON进行了标准化,因此有很多库可以为您完成繁重的工 ...
- input发送a.jax_与时俱进:在JAX-RS API中采用OpenAPI v3.0.0
input发送a.jax 看到时间流逝如此之快,真是太恐怖了! OpenAPI规范3.0.0是对Swagger规范的重大改进,大部分已于一年前发布,但工具赶上了一段时间. 但是,随着最近Swagger ...
- input发送a.jax_JAX-RS 2.0的新功能– @BeanParam批注
input发送a.jax 至少可以说JAX-RS很棒,也是我的最爱之一! 为什么? 功能丰富 直观(因此学习曲线不那么陡峭) 易于使用和开发 具有出色的RI – Jersey , RestEasy等 ...
- JAX-RS 2.0:服务器端处理管道
这篇文章的灵感来自JAX-RS 2.0规范文档 (附录C)中的Processing Pipeline部分. 我喜欢它是因为它提供了JAX-RS中所有模块的漂亮快照-以准备好吞咽的胶囊形式! 礼貌– J ...
最新文章
- 设置文件权限位时我们一般忽略了suid/guid的存在,现在看看它们到底是怎么回事
- 漫画:程序员太难了!为什么 Java 中的 main 方法必须是它?
- 全国大学生智能车竞赛赛场准备好,就等同学们入驻展示
- 十、Redis五大数据类型之二List
- Mysql 执行流程
- python与数值计算环境安装
- C++ 的门门道道 | 技术头条
- 空间目录Tomcat ShutDown出现 Insufficient space for shared memory file:
- 第八章 深度强化学习-Nature深度Q网络(Nature DQN)
- Sharepoint SSL(Https)
- POI设置excle单元格样式
- Windows Qt安装教程
- 蝶形算法(Butterfly Algorithm)未更完
- 数字信号处理经典书籍
- Android--刷机教程
- linux怎样收集系统信息,Linux下收集系统和硬件信息的10个实用命令
- 【全开源+免费更新】doodoo.js创建项目教程
- 关于c语言杨辉三角编写的改进
- 案例研究|蜜雪冰城65亿背后的差异化商业模式创新
- Apache Kylin(一)
热门文章
- P1477-[NOI2008]假面舞会【构图,dfs,gcd】
- jzoj3385-黑魔法之门【并差集】
- jzoj1158-荒岛野人【扩欧,gcd,同余方程】
- codeforces1012 B. Chemical table(并查集+思维)
- codeforces1208 F. Bits And Pieces(SOS DP)
- 【决策单调性】玩具装箱(金牌导航 决策单调性优化DP-1)
- Sentinel(九)之热点参数限流
- 编译原理(四)之解析语言翻译成三地址代码
- Windows.etc\hosts文件
- opencv立方体的画法_用opengl立方体的画法