我有一个POJO Artwork
。我从一个RESTful Web服务中以JSON格式在HTTP响应体中检索这些对象的List
。我正在尝试编写一个基于Rest Assured的测试,该测试将分析返回的列表。代码看起来像这样:
Response response = get("/artwork");
List returnedArtworks = response.getBody().as(List.class)
字符串
问题是,我无法让Rest Assured将返回的JSON解析为List<Artwork>
。我得到了一个List<LinkedHashMap>
。该图具有适当的结构,即可以由JacksonMap到Artwork
对象,但我希望避免手动Map它。
我的模型中的JSONMap是可以的,因为当我像这样Map单个对象时:
Artwork returnedArtwork = response.getBody().as(Artwork.class);
型
很好用。
有可能得到returnedArtworks
作为List<Artwork>
吗?
6条答案
按热度按时间vyu0f0g11#
你可以这样做:
字符串
技巧是将JSON反序列化为一个对象数组(因为数组或列表的JSON字符串没有区别),然后将数组转换为列表。
9ceoxa922#
此解决方案适用于版本3.0.2(io.restassured):
字符串
这将为如下结构提取对象:
型
使用json:
型
50few1ms3#
通过使用Google的Gson库,您可以轻松地将其解析为
List<Artwork>
。试试下面的代码字符串
tzdcorbm4#
放心提供
as(java.lang.reflect.Type)
旁边的版本预期在问题中使用的Class
。字符串
在我看来,
type
变量的方式取决于所使用的序列化库。如果使用Gson,如Purushotham's answer所指出的,可以使用
TypeToken
。我更喜欢直接在rest-assured中使用它:型
当使用Jackson时,解决方案是使用
TypeFactory
(javadoc,source)来告诉它应该被反序列化为哪个类型:型
6yoyoihd5#
使用RESTassured 3.0.2,您只需检查数组中是否存在内容
字符串
通过这种方式,您可以通过转换JSON来避免代码的复杂性,以列出更多如何检查响应内容的示例link
eivnm1vs6#
目前,我们有一个更好的解决方案,使用Typeref,这将有助于提取通用对象
字符串
或者是
型