`
zzc1684
  • 浏览: 1222930 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

JAX-RS入门 五: 自动类型转换

阅读更多

一、默认类型转换规则

 

在上一节中,已经了解了怎么使用那个annotations去提取请求中各种信息,不过得到的信息值默认都是一个string类型。

 

这一节介绍JAX-RS一些内置的自动类型转换及其规则。

 

理论上JAX-RS可以将请求信息转换成任一Java类型,只要该Java类型满足以下条件之一:

  1. 基本类型: int、short、float、double、byte、char 或 boolean 等
  2. 定义了带单个String参数的构造方法
  3. 拥有一个static的valueOf(String)方法,并且这个方法返回这个类型的一个实例
  4. java.util.List<T>、java.util.Set<T>或java.util.SortedSet<T>,其中 T 满足条件2或者3,或者是一个String

例如:

转换成int代码 复制代码 收藏代码
  1. @GET   
  2. @Path("{id}")   
  3. public String get(@PathParam("id") int id) {...}   
转成对象代码 复制代码 收藏代码
  1. @Path("/myservice")   
  2. public class MyService {   
  3.     @GET   
  4.     @Produces("text/html")   
  5.     public String get(@HeaderParam("Referer") URL referer) {   
  6.         ...   
  7.     }   
  8. }   
Valueof()方法代码 复制代码 收藏代码
  1. public enum Color {   
  2.     BLACK,   
  3.     BLUE,   
  4.     RED,   
  5.     WHITE,   
  6.     SILVER   
  7. }   
  8.   
  9. @GET   
  10. @Path("/{model}/{year}")   
  11. @Produces("image/jpeg")   
  12. public Jpeg getPicture(@PathParam("make") String make,   
  13.     @PathParam("model") String model,   
  14.     @MatrixParam("color") Color color) {   
  15.     ...   
  16. }   
转成一个list代码 复制代码 收藏代码
  1. import java.util.List;   
  2. @Path("/customers")   
  3. public class CustomerResource {   
  4.     @GET   
  5.     @Produces("application/xml")   
  6.     public String getCustomers(   
  7.         @QueryParam("start") int start,   
  8.         @QueryParam("size") int size,   
  9.         @QueryParam("orderBy") List<String> orderBy) {   
  10.         ...   
  11.     }   
  12. }   
  13.   
  14. 输入:GET /customers?orderBy=last&orderBy=first   

如果转换失败,则认为client请求出错,返回一个404错误。

 

二、定义缺省值 @DefaultValue

 

通过使用@DefaultValue注释,可以给某个请求参数定义缺省值,当client的请求中未包含此参数,则缺省参数值将被使用,例如:

缺省值代码 复制代码 收藏代码
  1. @Path("/customers")   
  2. public class CustomerResource {   
  3.     @GET   
  4.     @Produces("application/xml")   
  5.     public String getCustomers(@DefaultValue("0") @QueryParam("start") int start,   
  6.         @DefaultValue("10") @QueryParam("size") int size) {   
  7.         ...   
  8.     }   
  9. }   

如果请求中未提供 start 请求参数,则缺省值0将被使用;如果请求中未包含 size 参数,则缺省值10被使用。

 

三、强制不解码 @Encoded

 

使用@Encoded注释,用来告诉JAX-RS,不需要自动解码,直接使用编码后的请求值,例如:

@encoded代码 复制代码 收藏代码
  1. @GET   
  2. @Produces("application/xml")   
  3. public String get(@Encoded @QueryParam("something") String str) {...}  
分享到:
评论

相关推荐

    CICS-Liberty-JAXRS-Sample:CICS-Liberty-J​​AXRS-Sample 基于 CICS 目录示例

    CICS-Liberty-J​​AXRS-示例CICS-Liberty-J...查询目录项,例如: 参考: 还有其他方法可以转换 JSON 或配置 JAX-RS,请参阅下面的详细信息: 将 Jackson 与普通的旧 Java 对象(PO​​JO)一起使用 IBM JAX-RS 入门:

    quick-start-jax-rs

    【快速入门JAX-RS】 JAX-RS是Java API for RESTful Web Services的缩写,它是Java平台上的一个标准,用于构建RESTful Web服务。REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,...

    将铲子朝向JAX-WS

    3. **JAXB(Java Architecture for XML Binding)**:JAX-WS中的一个重要组件,用于在Java对象和XML之间进行自动转换。 4. **WS-I(Web Services Interoperability Organization)**:提供了一系列的规范,确保不同...

    cxf入门文档资料

    5. **数据绑定**:CXF支持JAXB(Java Architecture for XML Binding)进行XML到Java对象的自动转换,简化了XML数据的处理。 6. **安全与认证**:文档可能涵盖了如何在CXF中集成安全机制,如WS-Security、OAuth2或...

    hello-world-apis:API API de grafos的世界您好

    通过深入学习和实践这些知识点,开发者可以创建高效、可靠且易于维护的API,无论是在"hello-world-apis"这样的入门项目还是实际的大型企业级应用中。在实际操作中,理解HTTP协议、熟悉Java编程、掌握图形理论以及对...

    初级Webservice教程代码资料(java)

    在Java中,我们通常使用JAX-WS(Java API for XML Web Services)或JAX-RS(Java API for RESTful Web Services)来开发Web服务。JAX-WS主要用于构建SOAP-based的Web服务,而JAX-RS则用于创建RESTful风格的服务。...

    jaxws的小demo

    - **SOAP Binding**:JAX-WS将Java方法和SOAP消息之间的转换自动化,减少了开发者的负担。 4. **使用JAX-WS开发步骤** 1) 定义SEI接口。 2) 实现SEI接口,并添加必要的业务逻辑。 3) 使用`wsimport`工具生成...

    WebService技术手册 CXF&XFire

    - **JAX-WS与JAX-RS实现**:CXF提供了JAX-WS的完全实现,用于创建SOAP服务;同时,它也是JAX-RS规范的重要实现者,支持RESTful服务开发。 - **数据绑定**:CXF支持多种数据绑定技术,如JAXB(Java Architecture ...

    camel-manual-2.10.4.pdf

    - Apache CXF:一个智能的Web服务套件(包括JAX-WS和JAX-RS)。 - Apache Karaf:一个小型的基于OSGi的运行时环境,其中可以部署容器代理的应用程序。 - Apache MINA:一个高性能的NIO驱动的网络框架。 Camel的核心...

    cxf webserice 开发指南

    它提供了强大的支持,包括对JAX-WS和JAX-RS标准的实现,以及丰富的工具集,帮助开发者从Java类生成WSDL,反之亦然。本文将引导你逐步了解如何在项目中集成CXF,进行Web服务的开发。 **一、CXF WebService 准备工作*...

    java webService 中文与英文教程

    2. JAX-WS入门:讲解如何使用JAX-WS创建一个简单的Web服务和客户端,包括服务端点接口(SEI)、服务实现、WSDL生成等。 3. 消息处理:介绍消息模式,如RPC/encoded、RPC/literal和Document/literal。 4. 异常处理:...

    cfx web service

    它不仅支持基于JAX-WS的Web服务,还支持基于JAX-RS的RESTful服务。CXF提供了丰富的客户端和服务器端API,使得开发Web服务变得更加简单。 **二、Cfx Web Service开发流程** 1. **定义服务接口**:首先,你需要定义...

    JavaEE-7-Samples:所有 Java EE6 和 7 示例

    Java EE 7增强了JAX-RS 2.0,包括支持超媒体链接和更强大的异常处理。 通过"JavaEE-7-Samples"项目,开发者可以学习到如何在实际环境中应用这些技术,从而提升他们的Java EE开发技能。每个示例都会包含详细的代码和...

    apache-cxf4.0.1全量JAR包

    - **数据绑定**:CXF支持多种数据绑定技术,如JAXB(Java Architecture for XML Binding),用于自动将XML消息转换为Java对象,反之亦然。 - **协议栈**:CXF实现了众多WS-*协议,如WS-Security、WS-Addressing等,...

    cxf 入门(hello world)

    CXF支持JAX-WS和JAX-RS标准,分别用于构建SOAP和RESTful服务。JAX-WS是基于WSDL(Web服务描述语言)的,而JAX-RS则基于HTTP协议和URI设计原则。 **步骤一:创建CXF项目** 1. 设置开发环境:确保已经安装了Java JDK...

    RESTEasy入门经典.docx

    总的来说,RESTEasy结合JAX-RS和JAXB,提供了一种简洁、高效的方式来构建RESTful Web Services,减少了编码工作量,提高了可维护性。在实际项目中,你可以利用RESTEasy提供的各种功能,快速地搭建和扩展你的服务。而...

    cxf入门使用代码展示

    3. 数据绑定:CXF支持多种数据绑定机制,如JAXB,它可以自动将XML数据转换为Java对象,反之亦然。 4. 安全性:项目可能还涉及了如何使用CXF实现安全特性,如基本认证、SSL/TLS加密和WS-Security。 在“MyCxf”这个...

    CXF-WebService-开发指南、技术文档.docx

    它提供了强大的服务实现和客户端调用能力,支持多种协议和规范,如JAX-WS、JAX-RS等。本指南将详细介绍如何使用CXF进行Web服务开发。 **一、CXF WebService 准备工作** 1. **官方网址**:[http://cxf.apache.org/]...

    resteasy guide

    RESTEasy实现了JAX-RS规范中的内容协商功能,可以根据客户端的接受类型选择合适的表示形式。 #### 18. Content Marshalling/Providers RESTEasy提供了多种内容序列化和反序列化(即内容转换)机制,包括默认的JAX-...

Global site tag (gtag.js) - Google Analytics