JAX-RS规范基础

1:概念与常用注解

JAX-RS是一套用java实现REST服务的规范,提供了一些标注将一个资源类,一个POJOJava类,封装为Web资源。标注包括:

  • @Path,标注资源类或方法的相对路径
  • @GET,@PUT,@POST,@DELETE,标注方法是用的HTTP请求的类型
  • @Produces,标注返回的MIME媒体类型
  • @Consumes,标注可接受请求的MIME媒体类型
  • @PathParam,@QueryParam,@HeaderParam,@CookieParam,@MatrixParam,@FormParam,分别标注方法的参数来自于HTTP请求的不同位置,例如@PathParam来自于URL的路径,@QueryParam来自于URL的查询参数,@HeaderParam来自于HTTP请求的头信息,@CookieParam来自于HTTP请求的Cookie。

2:JAX-RS的几种实现

目前JAX-RS的实现包括:

3:常用注解范例

(1)PathParam

Java代码  

  1. public class CustomerResource {
  2. ...
  3. @Path("{id}")
  4. @GET
  5. @Produces("application/xml")
  6. public StreamingOutput getCustomer(@PathParam("id") int id) {
  7. ...
  8. }
  9. }

此处,取得{id}的值,并试图转换成一个int型的值。

可以同时使用多个PathParam:

Java代码  

  1. @Path("/customers")
  2. public class CustomerResource {
  3. ...
  4. @Path("{first}-{last}")
  5. @GET
  6. @Produces("application/xml")
  7. public StreamingOutput getCustomer(@PathParam("first") String firstName,
  8. @PathParam("last") String lastName) {
  9. ...
  10. }
  11. }

(2)@QueryParam

很显然,QueryParam用来获取查询参数,对于 GET /customers?start=0&size=10 ,例如:

Java代码  

  1. @Path("/customers")
  2. public class CustomerResource {
  3. @GET
  4. @Produces("application/xml")
  5. public String getCustomers(@QueryParam("start") int start,
  6. @QueryParam("size") int size) {
  7. ...
  8. }
  9. }

这里start为0,size为10.

同上面的PathParam,也可以用UriInfo去获取QueryParam,例如:

Java代码  

  1. @Path("/customers")
  2. public class CustomerResource {
  3. @GET
  4. @Produces("application/xml")
  5. public String getCustomers(@Context UriInfo info) {
  6. String start = info.getQueryParameters().getFirst("start");
  7. String size = info.getQueryParameters().getFirst("size");
  8. ...
  9. }
  10. }

(3)@FormParam

很自然,FormParam用于提取POST请求中的Form参数,其中Content-Type被假设为application/x-www-formurlencoded。例如有以下Form请求

Html代码  

  1. <FORM action="http://example.com/customers" method="post">
  2. <P>
  3. First name: <INPUT type="text" name="firstname"><BR>
  4. Last name: <INPUT type="text" name="lastname"><BR>
  5. <INPUT type="submit" value="Send">
  6. </P>
  7. </FORM>

可以如下取值:

Java代码  

  1. @Path("/customers")
  2. public class CustomerResource {
  3. @POST
  4. public void createCustomer(@FormParam("firstname") String first,
  5. @FormParam("lastname") String last) {
  6. ...
  7. }
  8. }

(4)HeaderParam

很直接,用来提取HTTP Header值的。例如:

Java代码  

  1. @Path("/myservice")
  2. public class MyService {
  3. @GET
  4. @Produces("text/html")
  5. public String get(@HeaderParam("Referer") String referer) {
  6. ...
  7. }
  8. }

(5)@CookieParam

提取cookie信息,例如:

Java代码  

  1. @Path("/myservice")
  2. public class MyService {
  3. @GET
  4. @Produces("text/html")
  5. public String get(@CookieParam("customerId") int custId) {
  6. ...
  7. }
  8. }

这里注入了的是一个cookie的值,如果想取得更多的信息,而不仅仅是基本值,则可以直接注入javax.ws.rs.core.Cookie对象,例如:

Java代码  

  1. @Path("/myservice")
  2. public class MyService {
  3. @GET
  4. @Produces("text/html")
  5. public String get(@CookieParam("customerId") Cookie custId) {
  6. ...
  7. }
  8. }

时间: 2024-12-19 14:08:13

JAX-RS规范基础的相关文章

JAVAEE规范基础知识

JavaEE规范基础知识 本人博客文章网址:https://www.peretang.com/basic-knowledge-of-javaee-standard/ JavaEE简介 JavaEE,Java平台企业版,其提供了一个用于开发Web应用和企业应用的标准平台/规范. 意味着,所有d的JavaEE服务器厂商提供的JavaEE 容器/服务器 必然 包含/支持 JavaEE所有规范的实现.使用标准JavaEE规范开发并搭配JavaEE 容器/服务器 可令开发人员专注于业务层面上,而不需要分心

编程规范基础学习笔记

基本原则:1.直观2.简捷3.不要省 ***************************************************************************************** ---命名规则---常量名:大写,HAVE_ARCH_STRNCAT变量名:    1.英文单词组合,可望文生义,避免无意义的数字编号取名.size,len,val,flag    2.简捷,不要过长.    3.名词性词组:DataGotFromSD, CurrentVal  

JavaScript命名规范基础及系统注意事项

前端代码中的自定义变量命名           命名方法:     1.驼峰 2.下划线连接           对于文件名,我们一般采用小写字母+下划线的形式     为什么?因为在window下aa.txt和AA.txt系统认为是同一个的文件,而在linux环境下则认为是2个不同的文件,为了使我们代码移植性更好以及为了避免一些不必要的麻烦建议文件名必须小写:           对于js又有以下一些规则:     A:普通变量名     1.以变量首字母突出这个变量的类型(我叫她首字母标记类

Spring框架基础知识

本人博客文章网址:https://www.peretang.com/basic-knowledge-of-spring-framework/ Spring框架简介 Spring , 一个开源的框架 , 由Rod Johnson创建. Spring是为了解决企业应用开发的复杂性而创建的 , 可以让简单的JavaBeans/POJO来实现之前只有EJB[1]才能完成的事情. Spring还提供了大量API简化与其他第三方框架的集成. 纵览Spring , 你会发现Spring可以解决非常多的问题 ,

DB2相关规范-日志&lt;持续更新&gt;

2015/5/26 星期二 上午 8:40:23 1. 整体的规范 1,1 关键字大写 , {} 整体快 [] 可选项 1.2 注意操作符的优先级 1.3 注意链接字符 1.4 删除重复行 关键字 distinct 显示 1.5 使用 dis [ribe] 表示表结构 2. 练习下 3. 字符跟日期要包含在单引号里面 3.1 字符大小敏感 日期格式敏感 3.2 between and 在俩个值之间 3.3 in(set) 可以俩列值 等于值列表中的一个 -- 可以练习下看看 -- 3.4 已安装

Java开源Apache项目

Commons-Pool Commons-Pool 提供了通用对象池接口,一个用于创建模块化对象池的工具包,以及通常的对象池实 更多Commons-Pool信息 Commons-Math Math 是一个轻量的,自包含的数学和统计组件,解决了许多非常通用但没有及时出现在Java标准语言中的实践问题. 更多Commons-Math信息 Commons-Jelly Jelly能够把XML转换成可执行代码,所以Jelly是一个基于XML与Java的脚本和处理引擎. Jelly借鉴了JSP定指标签,Ve

Servlet 4.0 入门

Java? Servlet API 是主流服务器端 Java 的基本构建块,也是 Java EE 技术的一部分,例如,用于 Web 服务的 JAX - RS.JSF (JavaServer Faces) 和 JSP (JavaServer Pages).Java servlet 也独立存在,提供一系列支持动态 Web 内容的功能.其中包括过滤器.Web 安全性以及用于处理 HTTP 请求和响应的功能. Servlet 4.0 是 API 的最新版本,也是 Java EE 8 规范的核心更新.正如

基于柯西矩阵的Erasure Code技术详解

一.概述 Erasure Code可以应用于分布式存储系统中,替代多份数据拷贝的数据冗余方式,从而可以提高存储空间利用率.此外,Erasure code还可以应用于传统RAID系统中,增加数据冗余度,支持多块盘同时发生故障,从而可以提高数据可靠性. 采用范德蒙矩阵可以构建Erasure code(关于范德蒙矩阵的编解码方法,可以参考文章<基于范德蒙矩阵的Erasure code技术详解>),其生成矩阵表示如下: 采用范德蒙矩阵作为编码矩阵的问题在于算法复杂度太高,其解码算法复杂度为O(n^3)

JavaWeb学习总结第四篇--Servlet开发

Servlet开发 用户在浏览器中输入一个网址并回车,浏览器会向服务器发送一个HTTP请求.服务器端程序接受这个请求,并对请求进行处理,然后发送一个回应.浏览器收到回应,再把回应的内容显示出来.这种请求—响应模式就是典型的Web应用程序访问过程. JavaWeb应用程序中所有的请求—响应都是由Servlet完成的.Servlet是JavaWeb的核心程序,所有的网址最终都交给Servlet处理.Servlet并没有main之类的执行方法.当用户访问服务器的时候,Tomcat是通过调用Servle