Java泛型Restletclient
写一个与restletserver通信的client类。用于測试通信是否成功。而且进行交互。为了方便其它人使用。于是,写一个通用的方法封装起来,但是中途却放生了一些问题。
依照正常写法,顺序走下来是这种:

public static void main(String args[]){
String url="http://localhost:8888/hi";
ClientResource clientResource=new ClientResource(url);
User user=new User();
user.setName("zz");
user.setAge("12");
Representation representation=clientResource.post((new JacksonRepresentation<User>(user)));
JacksonRepresentation<User> jacksonRepresentation=new JacksonRepresentation<User>(representation,User.class);
try {
User user1=jacksonRepresentation.getObject();
System.out.println(user1.getName());
System.out.println(user1.getAge());
} catch (IOException e) {
e.printStackTrace();
}
}

这样没什么问题。能够成功拿到server返回的数据。于是在这个基础上把restlet的东西包装起来。
这样写的:

public static Object getServerResponse(String url,Object user){
ClientResource clientResource=new ClientResource(url);
Representation representation=clientResource.post((new JacksonRepresentation<Object>(user)));
JacksonRepresentation<Object> jacksonRepresentation=new JacksonRepresentation<Object>(representation,Object.class);
Object o=null;
try {
o=jacksonRepresentation.getObject();
} catch (IOException e) {
e.printStackTrace();
}
return o;
}

这样在main方法中,把object转换为User就能够了。可是转换过程中,会报一个错误:
Exception in thread "main" java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to test.User
无法将LinkedHashMap转换为User,代码中并没实用到LinkedHashMap,应该是restlet转换过程中才发生的这个问题。后来纠结了半天,问了一下比較有经验的同事,才知道上面的转换,并没有给返回的类型明白的定义,仅仅转换为object。这样是不能够的。
经过改造,最后写法是这种:

public static<T, V> V get(String url, T data, Class<V> response) {
ClientResource clientResource=new ClientResource(url);
Representation representation=clientResource.post((new JacksonRepresentation<T>(data)));
JacksonRepresentation<V> jacksonRepresentation=new JacksonRepresentation<V>(representation, response);
try {
return jacksonRepresentation.getObject();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

这样,使用泛型,在这个封装的方法中,指定了返回数据的类型。这样就不会出现之前的错误。
Java泛型Restletclient的更多相关文章
- Java泛型的历史
为什么Java泛型会有当前的缺陷? 之前的章节里已经说明了Java泛型擦除会导致的问题,C++和C#的泛型都是在运行时存在的,难道Java天然不支持“真正的泛型”吗? 事实上,在Java1.5在200 ...
- 浅析Java 泛型
泛型是JavaSE5引入的一个新概念,但是这个概念在编程语言中却是很普遍的一个概念.下面,根据以下内容,我们总结下在Java中使用泛型. 泛型使用的意义 什么是泛型 泛型类 泛型方法 泛型接口 泛型擦 ...
- Java:泛型基础
泛型 引入泛型 传统编写的限制: 在Java中一般的类和方法,只能使用具体的类型,要么是基本数据类型,要么是自定义类型.如果要编写可以应用于多种类型的代码,这种刻板的限制就会束缚很多! 解决这种限制的 ...
- java泛型基础
泛型是Java SE 1.5的新特性, 泛型的本质是参数化类型, 也就是说所操作的数据类型被指定为一个参数. 这种参数类型可以用在类.接口和方法的创建中, 分别称为泛型类.泛型接口.泛型方法. Ja ...
- 使用java泛型设计通用方法
泛型是Java SE 1.5的新特性, 泛型的本质是参数化类型, 也就是说所操作的数据类型被指定为一个参数. 因此我们可以利用泛型和反射来设计一些通用方法. 现在有2张表, 一张user表和一张stu ...
- 关于Java泛型的使用
在目前我遇到的java项目中,泛型应用的最多的就属集合了.当要从数据库取出多个对象或者说是多条记录时,往往都要使用集合,那么为什么这么使用,或者使用时有什么要注意的地方,请关注以下内容. 感谢Wind ...
- 初识java泛型
1 协变数组类型(covariant array type) 数组的协变性: if A IS-A B then A[] IS-A B[] 也就是说,java中的数组兼容,一个类型的数组兼容他的子类类型 ...
- 【Java心得总结四】Java泛型下——万恶的擦除
一.万恶的擦除 我在自己总结的[Java心得总结三]Java泛型上——初识泛型这篇博文中提到了Java中对泛型擦除的问题,考虑下面代码: import java.util.*; public clas ...
- 【Java心得总结三】Java泛型上——初识泛型
一.函数参数与泛型比较 泛型(generics),从字面的意思理解就是泛化的类型,即参数化类型.泛型的作用是什么,这里与函数参数做一个比较: 无参数的函数: public int[] newIntAr ...
随机推荐
- A Game of Thrones(11) - Daenerys
Daenerys Targaryen wed Khal Drogo with fear and barbaric([bɑː'bærɪk]野蛮的,粗野的) splendor(光彩:壮丽) in a fi ...
- hdu3001(状压dp)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3001 题意:n 个城市已经 m 条路 以及对应路费 c,要求遍历所有城市最少的路费,每个城市不能超过2 ...
- hdu2639(背包求第k优解)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2639 题意:给出一行价值,一行体积,让你在v体积的范围内找出第k大的值 分析:dp[i][j][k]表 ...
- 云计算分布式大数据神器Spark实战高手之旅
从2012年1月份研究Spark到如今已经两年多的时间了. 在这两年多的时间里比較彻底的研究了Spark的源码并已经在2014年4月24日编写完毕了世界上第一本Spark书籍. 鉴于CSDN在大陆IT ...
- Knockout应用开发指南 第三章:绑定语法(1)
原文:Knockout应用开发指南 第三章:绑定语法(1) 第三章所有代码都需要启用KO的ko.applyBindings(viewModel);功能,才能使代码生效,为了节约篇幅,所有例子均省略了此 ...
- openwrt教程 第一章 物联网&openwrt开发概述
1.1 我们的宗旨 互联网.移动互联网的时代已经过去,物联网的时代已经来临!2014年,是物联网元年,2016年,物联网将达到高潮!为了迎接该潮流,我们工作室(F403科技创意室:http://f40 ...
- 64位CentOS5.6安装Mysql 5.5.11GA
1.更新并查看当前CentOS版本是否为5.6yum updatelsb_release -a 2.下载文件下载 bison-2.4.3.tar.gz到/usr/local/src下载 cmake-2 ...
- u-boot: Error: Can't overwrite "ethaddr"
When try to execute following command, It reports error as following: --->8--- U-Boot> setenv ...
- Just like normal variables,
Just like normal variables, pointers can be declared constant. There are two different ways that poi ...
- java平台的常用资源
分离领域 翻译 from :akullpp | awesome-java 大家一起学习,共同进步. 如果大家觉得有用,就mark一下,赞一下,或评论一下,让更多的人知道.thanks. 构建 这里搜集 ...