Restlet客户端接收LinkedHashMap元素的数组而不是对象元素的数组

时间:2013-02-06 00:41:40

标签: json object jackson restlet

阿罗哈。

我有一个带有@Get方法的Restlet服务器应用程序,它应该返回Object [],但是客户端接收一个Object [],其元素类型为LinkedHashMap。每个接收到的数组元素对应于服务器应该发送的对象的相应元素。

以下是我的资源(界面)文件的相关部分:

@Get
public Object[] retrieve() ;

以下是我的服务器资源文件的相关部分:

public Object[] retrieve()
{

  User newUser = new User() ;
  newUser.firstName = "John" ;
  newUser.lastName = "Doe" ;

  Object[] objectArray = (Object[]) Array.newInstance( User.class, 1 ) ;
  objectArray[0] = newUser ;

  return objectArray ;

}

以下是我的客户的相关部分:

public static void main( String[] args ) throws Exception
{
  Object[] arrayOfObjects = (Object[]) clientResource.retrieve() ;   //  array of LinkedHashMap elements
}

我认为获得我想要获得的结果很容易,但我仍然是Restlet框架的新手。因此,有人可以告诉我我做错了什么,并向我展示如何从服务器正确发送(JSON编码)对象数组的示例?

提前谢谢。

小心,
达尔文

=============================================== ===================================

更新

根据StaxMan的评论(下文),我也尝试返回一个通用List,但这只是导致了LinkedHashMap元素的ArrayList,而不是所需元素类型的ArrayList。

以下是我的资源(界面)文件的相关部分:

@Get
public <T> List<T> retrieve() ;

以下是我的服务器资源文件的相关部分:

public <T> List<T> retrieve()
{
  List<T> list = ... ;
  return list ;
}

以下是我的客户的相关部分:

//  the following does not work, since the returned ArrayList's
//  elements are not User objects but LinkedHashMap objects:
User[] users = (User[]) ((ArrayList<User>)clientResource.<User>retrieve()).toArray( (User[])Array.newInstance(User.class,0) ) ;

有人能告诉我如何从服务器获取我想要的对象的Array或List或ArrayList,同时仍然维护服务器的通用(甚至伪通用)性质吗?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

这是因为Listjava.lang.Object - 您要求获得对象列表。没有其他类型信息,这几乎是你可能得到的。在您的情况下,您应该返回User[](或List<User>