JAX-RS入门 五: 自动类型转换_godwish2013的博客-程序员宅基地

技术标签: jax-rs  javaee  

一、默认类型转换规则

 

在上一节中,已经了解了怎么使用那个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) {...}  

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011970711/article/details/19817621

智能推荐

谈「韦诺之战」_a13393665983的博客-程序员宅基地

谈「韦诺之战」 谈「韦诺之战」 | 半卷 谈「韦诺之战」 沈觅仁 狂想集 2011-10-16 玩韦诺之战也有好长时间了。一直十分热爱战棋类游戏,例如英雄无敌,例如火焰纹章,沉迷于培养英雄们,同时和他们一同冒险。玩韦诺之战的直接原因是,它是L...

Placement new、operator new、new operator_Mooooooooooooon的博客-程序员宅基地

http://www.cnblogs.com/younes/archive/2010/04/26/1721528.htmlPlacement new、operator new、new operator 完全释疑首先我们区分下几个容易混淆的关键词:      new(也称作new operator)、operator new、placement new。看如下代码:

Windows下MySQL5.5修改数据路径并解决1067错误_天心蓝的博客-程序员宅基地

一、文件下载MySQL5.5: (32位)http://cdn.mysql.com/Downloads/MySQL-5.5/mysql-5.5.30-win32.msi                 (64位)http://cdn.mysql.com/Downloads/MySQL-5.5/mysql-5.5.30-winx64.msi二、安装和配置       正常安装

leetcode_77_组合_cpyy103的博客-程序员宅基地

组合描述中等给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。示例输入:&nbsp;n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]解题一道简单的回溯问题,只需判断回溯函数的k是否为0一开始写的时候,没有copy(),最后的结果为空,...

github高级搜索_cheerlh2018的博客-程序员宅基地

1 查询条件一、明确搜索仓库标题、仓库描述、README1.只想查找仓库名称包含XX的仓库。语法:  in:name关键词2.查找描述的内容  in:descripton关键词3.查README文件包含特定关键词  in:readme关键词二、明确搜索 star、fork 数大于多少的1.star 数大于 1000 的XX 仓库  stars:&gt;数字 关键字2.star 数在某个区间 的XX 仓库  stars: 10..20 关键词...

emc vmaxs10K 划盘容灾配置_weixin_34381687的博客-程序员宅基地

1 在主存储划分磁盘C:\Program Files\EMC\SYMCLI\bin&gt;symconfigure -sid 111 -cmd "create dev count=1,size=218456,emulation=FBA,meta_member_size=54614,meta_confstriped,config=TDEV,binding to pool VP...

随便推点

C++学习感想2_teqingrenyuan的博客-程序员宅基地

我在CSDN上得更新很慢,因为我看得书少,学得东西少,还有就是自己很懒啊.说起来很惭愧.自己还是不是搞IT得,学得不好啊,上学期又开了C++这门课,其实我觉得c++还是太复杂了.

深入 Composer autoload_军火商OL的博客-程序员宅基地

转自:https://learnku.com/composer/t/1002/deep-composer-autoload这几天看到 phphub 上面有人开始进坑怒看 laravel 源代码,于是我也凑个热闹来看下这个故事。众所周知 composer 是现代 PHP 项目的基石, 与古老的 pear 不同, composer 并不是一款专注于系统级别 php 管理的包管理系统,而是基于项...

宁德时代上位机,支持 适合北汽ec200,eu260,北斗星 x5e,威马EX5 等_「已注销」的博客-程序员宅基地

宁德时代上位机,支持 适合北汽ec200,eu260,北斗星 x5e,威马EX5 等车型,东风T735 凯普特新款EV350 江铃凯悦

使用PHP ping域名或IP_ruxingli的博客-程序员宅基地_php ping域名

废话没有,直接贴代码。<?php/** * 使用PHP检测能否ping通IP或域名 * @param type $address * @return boolean */function pingAddress($address) { // Windows 服务器下 $pingresult = exec("ping -n 1 {$address}", $outco

Prometheus部署_阿木690的博客-程序员宅基地_prometheus部署

Prometheus介绍Prometheus是云原生计算基金会的一个项目,是一个系统和服务监控系统。它以给定的时间间隔从配置的目标收集指标,评估规则表达式,显示结果,并在观察到指定条件时触发警报。将 Prometheus 与其他指标和监控系统区分开来的功能包括:多维数据模型(由指标名称和键/值维度集定义的时间序列)PromQL,一种强大而灵活的查询语言,可利用这种维度不依赖于分布式存储;单个服务器节点是自治的用于时序收集的 HTTP拉取模型通过批处理作业的中间网关支持推送时序通过服务发现或

推荐文章

热门文章

相关标签