spring - Resttemplate无法解析类型T的数组

标签 spring rest generics deserialization resttemplate

我遇到了 Spring 和 RestTemplate 的问题。我想发送一个包含通用数组的对象(ListResponse)。定义如下:

public class ListResponse<T> implements Serializable {

private long total;
private int page;
private int pageSize;
private T[] objects;

我使用restTemplate.getForObject()发送请求。结果,我得到了一个 ListResponse 类型的对象,但对象数组包含 LinkedHashMap 数组,而不是包含 T 类型对象的数组。

restTemplate 似乎无法将数组中的元素转换为正确的类型。

如何确保获得 T 类型的对象数组?

最佳答案

我今天遇到了这个问题,这是我想出的解决方案(实际上,这是我的一位同事建议的)。我们将它与返回 List 的接口(interface)一起使用。

调用 RestTemplate 时,不要传入泛型类型。
定义:public class MyDtoListTemplate extends ListTemplate<MyDto>

然后,调用
MyDtoListTemplate template = restTemplate.getForObject("url", MyDtoListTemplate .class, mapOfPathVariables);

令人遗憾的是,您必须定义一个扩展/实现泛型类型的具体类,但随后 jackson 反序列化器可以使用泛型信息。

关于spring - Resttemplate无法解析类型T的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15922261/

相关文章:

C# - 泛型类中的方法,对 T 有额外的约束

c# - 如何使用 C# 泛型将方法限制为整数类型并仍然使用运算符

java - 如何在2个不同的java-spring项目中设计服务

java - 从路由中删除方法只能通过 Postman 进行,不能通过浏览器进行

java - 使用 spring security 进行身份验证 - 预身份验证场景

rest - 使用 Http 406 返回什么?

vb.net - 从头开始创建企业 .Net 命名空间框架的最佳方法是什么?

java - Spring 新手 - 使用 sec 标签不起作用

eclipse - 泽西 REST API : java. lang.NoSuchMethodError : org. glassfish.jersey.message.filtering.EntityFilteringFeature.enabled

java - 将框架作为 API 来玩。我可以使用基于 Web 的应用程序和 native Android 作为客户端来使用 Rest Api 直接与 Play 交互吗