【发布时间】:2013-02-06 00:41:40
【问题描述】:
阿罗哈。
我有一个带有 @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 的评论(如下),我也尝试返回一个通用列表,但这只会导致 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) ) ;
谁能告诉我如何从服务器获取我想要的对象的数组或列表或数组列表,同时仍保持服务器的通用(甚至伪通用)性质?
谢谢,提前。
【问题讨论】:
-
你不能使用像'T'这样的类型变量。那不是一个类型,那只是一个占位符。您必须传递一个真实类型,例如
User[].class用于User对象数组;类型变量不会这样做,因为它仅由编译器使用,在运行时不保留。
标签: json object jackson restlet