写一个与restlet服务器通信的客户端类,用于测试通信是否成功,并且进行交互。为了方便其他人使用,于是,写一个通用的方法封装起来,可是中途却放生了一些问题。

按照正常写法,顺序走下来是这样的:

 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();
}
}

这样没什么问题,可以成功拿到服务器返回的数据,于是在这个基础上把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泛型与Restlet客户端的更多相关文章

  1. 【Java心得总结四】Java泛型下——万恶的擦除

    一.万恶的擦除 我在自己总结的[Java心得总结三]Java泛型上——初识泛型这篇博文中提到了Java中对泛型擦除的问题,考虑下面代码: import java.util.*; public clas ...

  2. 学习记录 java泛型资料

    java泛型资料: 1. 概述在引入范型之前,Java类型分为原始类型.复杂类型,其中复杂类型分为数组和类.引入范型后,一个复杂类型就可以在细分成更多的类型.例如原先的类型List,现在在细分成Lis ...

  3. 转:有关Java泛型的类型擦除(type erasing)

    转载自:拈花微笑 自从Java 5引入泛型之后,Java与C++对于泛型不同的实现的优劣便一直是饭后的谈资.在我之前的很多training中,当讲到Java泛型时总是会和C++的实现比较,一般得出的结 ...

  4. Java——泛型

    前言 一般的类和方法,使用的都是具体的类型:基本类型或者自定义的类.如果我们要编写出适用于多种类型的通用代码,那么肯定就不能使用具体的类型.前面我们介绍过多态,多态算是一种泛化机制,但是也会拘泥于继承 ...

  5. 深入理解什么是Java泛型?泛型怎么使用?【纯转】

    本篇文章给大家带来的内容是介绍深入理解什么是Java泛型?泛型怎么使用?有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所助. 一.什么是泛型 “泛型” 意味着编写的代码可以被不同类型的对象所 ...

  6. JAVA泛型知识(一)

    Java泛型知识(二)<? extends T>和<? super T> Java1.5泛型指南中文版(Java1.5 Generic Tutorial) 目        录 ...

  7. java 泛型实例详解(普通泛型、 通配符、 泛型接口)

    java 泛型详解(普通泛型. 通配符. 泛型接口) 2013-02-04 19:49:49| 分类: JAVA | 标签:java |举报|字号 订阅 下载LOFTER客户端 JDK1.5 令我们期 ...

  8. Java泛型的历史

    为什么Java泛型会有当前的缺陷? 之前的章节里已经说明了Java泛型擦除会导致的问题,C++和C#的泛型都是在运行时存在的,难道Java天然不支持“真正的泛型”吗? 事实上,在Java1.5在200 ...

  9. 浅析Java 泛型

    泛型是JavaSE5引入的一个新概念,但是这个概念在编程语言中却是很普遍的一个概念.下面,根据以下内容,我们总结下在Java中使用泛型. 泛型使用的意义 什么是泛型 泛型类 泛型方法 泛型接口 泛型擦 ...

随机推荐

  1. TOMCAT下面发布项目的4种方式

    摘要 TOMCAT下面发布项目的4种方式,可用于在平时资料查询. 第一种方法: 将web项目文件件拷贝到webapps 目录中:或者直接通过Eclipse发布到Tomcat上. 第二种方法: 在tom ...

  2. IEdevelopToolbar ie浏览器的css代码调试工具

    使用IEdevelopToolbar的“选择元素”工具(ctrl+b),选取你要内容的地方下方的DIV,我们就可以找到几个关键字

  3. VMware克隆CentOS网络配置

    配置网络 如果是克隆CentOS的: vi /etc/udev/rules.d/70-persistent-net.rules 注释掉网络eth0,把最后一个改为eth0,记录下mac地址. vi / ...

  4. 【校招面试 之 C/C++】第11题 C++ 纯虚函数

    1.纯虚函数 成员函数的形参后面写上=0,则成员函数为纯虚函数. 纯虚函数声明: virtual 函数类型 函数名 (参数表列) = 0: class Person { virtual void Di ...

  5. 二叉树中的最大路径和 · Binary Tree Maximum Path Sum

    [抄题]: 给出一棵二叉树,寻找一条路径使其路径和最大,路径可以在任一节点中开始和结束(路径和为两个节点之间所在路径上的节点权值之和) [思维问题]: 不会写分合法 [一句话思路]: 用两次分治:ro ...

  6. URL传入带有%的参数的解决方法

    在参数中含有%时,需要将其转义为它的编码格式%25 ,后面跟对应字符的ASCII(16进制)码值 如我想要传入参数mm=75%到后台,就需要对%进行编码为%25,所以实际输入的参数是mm=75%25 ...

  7. 通过dockerfile构建nginx

    上次 利用命令行的形式来构建nginx服务, http://www.cnblogs.com/loveyouyou616/p/6806788.html 这次利用dockerfile文件来构建nginx服 ...

  8. JS验证登录平台

    function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = new Array("Android" ...

  9. [z]kafka相关资料

    http://my.oschina.net/ielts0909/blog/93190 http://www.iteye.com/magazines/107 http://blog.csdn.net/h ...

  10. redis缓存设置和读取

    一/写入 <?php $redis = new Redis(); //实例化redis $redis->pconnect('); $redis->,'huahua'); //设置变量 ...