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

智能推荐

43个功能测试点总结_iteye_15968的博客-程序员宅基地

43个功能测试点总结 软件测试  功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。针对Web系统的常用测试方法如下:  1. 页面链接检查:每一个链接是否都有对应的页面,并且页面之间切换正确。可以使用一些工具,如LinkBotPro、File-AIDCS、HTML Link Validater、Xenu等工具。LinkBotPro不支持...

UBOOT UART设置(基于mini2440)_羽落飞扬剑舞意的博客-程序员宅基地

基于mini2440的UBOOT UART设置1. 标准9针串口引脚定义根据图3.40的引脚顺序号,如果是作为RS-232C接口,则各引脚定义如表3.2所示。表3.2RS-232C引脚意义表各引脚的电气特性为:在TxD和RxD上,逻辑“1”为-3V~-15V; 逻辑“0”为+3V~+15V。在RTS、CTS、DSR、DTR和DCD等控制线上,信号有效为+3V~+

浅谈MFC类CrackMe中消息处理函数查找方法_weixin_30755709的博客-程序员宅基地

最近一个学姐发给我了一份CrackMe希望我解一下,其中涉及到了MFC的消息函数查找的问题,就顺便以此为例谈一下自己使用的消息函数查找的方法。本人萌新,如果有任何错漏与解释不清的地方,欢迎各路大佬指正。这个CrackMe是一个典型的MFC类型的程序,其框体如下:一、目标以及方法首先我们确认我们的目标是找到两个”注册”按钮的对应消息处理函数,那么有什么手段可以达到我们的目标?在MFC...

android 官方jar,Android 依赖中的jar 包获取方式_全能鬼才木希的博客-程序员宅基地

起因:目前Android 的jar 包我们都是 通过Android studio 的gradle 中添加依赖进行下载。但是eclipse 的用户表示,你在说什么? 读者可能会有疑问,现在还有eclipse 开发Android 的么?有今天我遇到一个有这个需求的朋友。前两个问题还好说,看到第三个,我陷入了沉思,百度不**有得事么。这个人石乐志吧。他说要官方的。我就开始找官方的下载库,没准以后能用上呢...

dir函数:遍历文件名_ainizhongguoaa的博客-程序员宅基地

dir(“地址\”)返回该地址下的第一个文件的文件名Sub t()Dim sr As Stringsr = Dir("G:\社团、活动\JMR\*.xlsx")这里使用了通配符,并指定了文件扩展名;如果不指定,至少应当在地址后加 \ ,以实现遍历DoMsgBox srsr = DirLoop Until sr = ""End Sub使用do

js操作DOM常用方法_weixin_30292745的博客-程序员宅基地

一、获取html元素getElemnetById('id')、getElementsByName('name')、getElementsByTagName('span')。(IE[6-10]、FF、Chrome) 1 &lt;!DOCTYPE html&gt; 2 &lt;html&gt; 3 &lt;head&gt; 4 &lt;meta ...

随便推点

Mac OS利用Composer安装的ThinkPHP遇到404 Not Found The requested URL was not found on this server问题_喜马拉雅的夜空的博客-程序员宅基地

有关Composer安装ThinkPHP的详细过程不再重复,主要针对运行http://localhost/tp5/public/出现404 Not Found The requested URL was not found on this server.的问题,问题如下图所示:解决办法:出现上面这个问题主要是因为ThinkPHP的安装文件与Web服务器的根目录不符,Mac的Apache服务器...

c++size_HELLOWORLDBOOK的博客-程序员宅基地_c++ size

以前求字符串大小时候一直搞A:size(s)这是错的正确应该是B:s.size();这俩逻辑理解是不同的A:size是一个函数,可以猜想它的函数体应该是int size(string s){int size=0;…return size;}这么理解也没啥问题也许这个函数还重载了不仅可以求字符串的大小,还可以求其他数据类型的size,但这么做肯定是不方便的,因为字符串的大小和其他类型的大小的求法有本质差别,字符串的求法应该是遍历,计数,故不好重载其他类型sizeof可以求很多类型的数据

Codeforces Round #311 (Div. 2) C. Arthur and Table (枚举+贪心+思维)_weixin_34221112的博客-程序员宅基地

C. Arthur and Tabletime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputArthur has bought a beautiful big table ...

vue2 实现 div contenteditable="true" 类似于 v-model 的效果_weixin_34088598的博客-程序员宅基地

问题在 vue2 中对表单控件有着良好的双向数据绑定机制,但是对于要特定实现某些功能的输入时,我们就不得不使用到 contenteditable="true" 的 div ,而在这个 div 上是使用 v-model 是没有效果的。那么问题就来了,输入是非常需要双向绑定的,这里的双向数据绑定该如何实现?解决思路一:自定义指令当然,说...

PyQt5:布局_weixin_33840661的博客-程序员宅基地

  在一个GUI程序里,布局是非常重要的。布局的作用是管理应用中的控件在窗体上的摆放位置,以及控件本身的大小尺寸。PyQt5支持三种布局:绝对布局、盒布局、网格布局。1、绝对布局  在窗口上是以像素单位设置尺寸和位置的,所以可以用绝对定位的方式确定控件的尺寸,以及控件在窗口上的位置。本例中,窗口放置三个QLabel控件,并通过绝对布局让这三个QLabel控件在不同的位置显示。实例如下:...

ccf 2018-12-3 CIDR合并_ghost889的博客-程序员宅基地

这是第一次参加ccf考试,当时考场上只得了50分,思路有点不清晰,回来整理了一下思路其实考试题目都给了思路了我的思路就是一个结构体,记录IP地址四段中的每一段的大小,还有一个len记录IP地址的长度排序操作使用sort函数自动从小到大合并使用另一个list来存储统计合并就像进栈出栈一样其实这两个我都想用list直接删除的好,但并不会这种操作下面是满分代码,附带了两个...