阿罗哈。
我有一个带有@Get方法的Restlet服务器应用程序,该方法本应返回Object[],但客户端接收到一个具有LinkedHashMap类型元素的Object[]。接收到的数组的每个元素都对应于服务器应该发送的对象的相应元素。
这是我的资源(接口)文件的相关部分:
@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,而不是所需类型的元素的ArrayNist。
这是我的资源(接口)文件的相关部分:
@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,同时保持服务器的通用(甚至伪通用)性质吗?
谢谢,提前。
这是因为List
就是java.lang.Object
——您需要一个对象列表,而您正在获得它。如果没有额外的类型信息,这几乎是你所能得到的全部。在您的情况下,您应该返回User[]
(或List<User>
)