写一个与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; }
这样,使用泛型,在这个封装的方法中,指定了返回数据的类型。这样就不会出现之前的错误。
除非注明转载,其它文章均为作者原创,能够自由转载。但请注明转载的本文的地址。请尊重作者的劳动成果。
【推荐】50万行VC++源代码: 大型组态工控、电力仿真CAD与GIS源代码库
融云,免费为你的App增加IM功能——让你的App“聊”起来!。
写“听云”原创博文。赢取iPhone 6超级大奖
· 你的工作不是写代码
· 双十一开门红。五家电商市值飙升900亿
· 陌陌值30亿美元吗?
· Mozilla Firefox十周年啦,公布了 N 多全新特性
· 程序猿失业?价值1100万的PLINY让计算机自己编程
» 很多其它新闻...
· 什么是用户体验。什么不是?
· 项目初始会议 – 怎样在一次会议中达成共识
· 禅意设计:网络简洁设计的缘起和未来
· 通过一组RESTful API暴露CQRS系统功能