我正在使用Spring的RestTemplate
来对REST Web服务进行调用。其中一个调用是返回某种类型的对象列表。 RestTemplate
方法要求提供类参数以指示预期的返回类型。
// restTemplate is type org.springframework.web.client.RestTemplate
URI restServiceURI = new URI("http://example.com/foo")
restTemplate.getForObject(restServiceURI, List<Foo>.class);
显然,这不会编译。当您提供类似的类型参数时,您无法获得静态.class
属性。当我删除type参数时,代码会编译,但会生成rawtypes
编译器警告。
我的问题很简单。我是坚持抑制编译器警告还是有更简洁的方法来编写代码?
答案 0 :(得分:3)
但RestTemplate如何知道将列表元素转换为类Foo
的实例?您是否尝试过运行代码,并按预期工作?
我能想到的一种方法是使用Array作为输入类型。例如
restTemplate.getForObject(restServiceURI, Foo[].class);
但我不知道是否支持。如果你真的需要反序列化更复杂的数据类型,那么你应该考虑使用Jackson或Gson。
使用Jackson,您可以使用ObjectMapper类轻松地从大多数来源反序列化数据。
String input = ...;
ObjectMapper mapper = new ObjectMapper();
List<Foo> list = mapper.readValue(input, new TypeReference<List<Foo>>(){});
上述工作原理是因为您有意创建了一个扩展TypeReference的匿名类,该类将在运行时记住它的泛型类型,因此它可以帮助对象映射器创建Foo列表。 For a fuller explanation