Java泛型Restletclient

时间:2021-07-17 05:23:37

写一个与restletserver通信的client类。用于測试通信是否成功。而且进行交互。为了方便其它人使用。于是,写一个通用的方法封装起来,但是中途却放生了一些问题。

依照正常写法,顺序走下来是这种:

Java泛型Restletclient
 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();
}
}
Java泛型Restletclient

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

这样写的:

Java泛型Restletclient
   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;
}
Java泛型Restletclient

这样在main方法中,把object转换为User就能够了。可是转换过程中,会报一个错误:

Exception in thread "main" java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to test.User

无法将LinkedHashMap转换为User,代码中并没实用到LinkedHashMap,应该是restlet转换过程中才发生的这个问题。后来纠结了半天,问了一下比較有经验的同事,才知道上面的转换,并没有给返回的类型明白的定义,仅仅转换为object。这样是不能够的。

经过改造,最后写法是这种:

Java泛型Restletclient
  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

这样,使用泛型,在这个封装的方法中,指定了返回数据的类型。这样就不会出现之前的错误。

除非注明转载,其它文章均为作者原创,能够*转载。但请注明转载的本文的地址。请尊重作者的劳动成果。
posted @ 2014-11-10 11:04 薛定谔的猫_ 阅读(305)
评论(0) 编辑 收藏
注冊用户登录后才干发表评论。请 登录 或 注冊訪问站点首页。