在带有泛型参数的泛型方法中使用 Spring RestTemplate

2023-11-26

要将泛型类型与 Spring RestTemplate 一起使用,我们需要使用ParameterizedTypeReference (无法获取通用 ResponseEntity,其中 T 是通用类“SomeClass”)

假设我有一些课

public class MyClass {
    int users[];

    public int[] getUsers() { return users; }
    public void setUsers(int[] users) {this.users = users;}
}

和一些包装类

public class ResponseWrapper <T> {
    T response;

    public T getResponse () { return response; }
    public void setResponse(T response) {this.response = response;}
}

因此,如果我尝试做这样的事情,一切都可以。

public ResponseWrapper<MyClass> makeRequest(URI uri) {
    ResponseEntity<ResponseWrapper<MyClass>> response = template.exchange(
        uri,
        HttpMethod.POST,
        null,
        new ParameterizedTypeReference<ResponseWrapper<MyClass>>() {});
    return response;
}

但是当我尝试创建上述方法的通用变体时......

public <T> ResponseWrapper<T> makeRequest(URI uri, Class<T> clazz) {
   ResponseEntity<ResponseWrapper<T>> response = template.exchange(
        uri,
        HttpMethod.POST,
        null,
        new ParameterizedTypeReference<ResponseWrapper<T>>() {});
    return response;
}

...并像这样调用这个方法...

makeRequest(uri, MyClass.class)

...而不是得到ResponseEntity<ResponseWrapper<MyClass>>我得到的对象ResponseEntity<ResponseWrapper<LinkedHashSet>>目的。

我怎么解决这个问题?这是 RestTemplate 的错误吗?

UPDATE 1感谢@Sotirios,我理解了这个概念。不幸的是我是新注册的,所以我不能评论他的答案,所以写在这里。我不确定我是否清楚地理解如何实施建议的方法来解决我的问题Map with Classkey(由@Sotirios 在他的答案末尾提出)。有人介意举个例子吗?


不,这不是一个错误。这是如何的结果ParameterizedTypeReference黑客作品。

如果你看一下它的实现,它使用Class#getGenericSuperclass()其中指出

返回表示实体的直接超类的类型 (类、接口、原始类型或 void)由此类表示。

如果超类是参数化类型,the Type返回的对象 必须准确反映源中使用的实际类型参数 代码。

所以,如果你使用

new ParameterizedTypeReference<ResponseWrapper<MyClass>>() {}

它将准确地返回一个Type for ResponseWrapper<MyClass>.

如果你使用

new ParameterizedTypeReference<ResponseWrapper<T>>() {}

它将准确地返回一个Type for ResponseWrapper<T>因为这就是它在源代码中的显示方式。

当春天看见T,这实际上是一个TypeVariable对象,它不知道要使用的类型,因此它使用默认类型。

你不能使用ParameterizedTypeReference您提议的方式,使其在接受任何类型的意义上通用。考虑写一个Map带钥匙Class映射到预定义的ParameterizedTypeReference对于那堂课。

你可以子类化ParameterizedTypeReference并覆盖它的getType方法返回一个适当创建的ParameterizedType, 按照 IonSpin 的建议.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在带有泛型参数的泛型方法中使用 Spring RestTemplate 的相关文章

  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • 多个 Maven 配置文件激活多个 Spring 配置文件

    我想在 Maven 中构建一个环境 在其中我想根据哪些 Maven 配置文件处于活动状态来累积激活多个 spring 配置文件 目前我的 pom xml 的相关部分如下所示
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • Java Integer CompareTo() - 为什么使用比较与减法?

    我发现java lang Integer实施compareTo方法如下 public int compareTo Integer anotherInteger int thisVal this value int anotherVal an
  • Eclipse Java 远程调试器通过 VPN 速度极慢

    我有时被迫离开办公室工作 这意味着我需要通过 VPN 进入我的实验室 我注意到在这种情况下使用 Eclipse 进行远程调试速度非常慢 速度慢到调试器需要 5 7 分钟才能连接到远程 jvm 连接后 每次单步执行断点 行可能需要 20 30
  • 在mockito中使用when进行模拟ContextLoader.getCurrentWebApplicationContext()调用。我该怎么做?

    我试图在使用 mockito 时模拟 ContextLoader getCurrentWebApplicationContext 调用 但它无法模拟 here is my source code Mock org springframewo
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r

随机推荐

  • 使用 R 将单列拆分为多个观察值

    我正在处理 HCUP 数据 该数据在一个列中具有一系列值 需要将其拆分为多个列 以下是 HCUP 数据框供参考 code label 61000 61003 excision of CNS 0169T 0169T ventricular s
  • iTunes Connect API [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 iTunes Connect 有 API 吗 某些应用程序如何将财务和销售报告下载到计算机 是否有一些 C Objective C API 包装器
  • 使用数据库的 Struts2 国际化

    我们有一个相当大的应用程序 有大量的动态内容 是否有强制 struts 使用数据库来进行 i18n 查找 而不是属性文件 如果有人曾经使用动态内容进行过国际化 我也愿意接受其他方法来解决这个问题 我不知道有一个简单的即插即用解决方案 因此您
  • 修复 IE6 中布局错误的策略?

    一般来说 解决 IE6 中布局错误的最佳方法是什么 当人们试图找出为什么你的页面突然看起来像一只猴子编写的代码时 应该寻找哪些最常见的错误或问题 要事第一 让自己得到Internet Explorer 开发人员工具栏 它是一个救星 并且与
  • 使用属性进行类实例化的 C# 到 VB.NET 语法转换

    我正在使用 Workflow Foundations 4 C 语言 并尝试编写 VB NET 表达式 有没有办法在 VB NET 中一行完成以下操作 SomeObj instance new SomeObj SomeStringProp a
  • gem install therubyracer -v 0.11.4 在 OS X 10.10 上失败

    按照此处的步骤操作osx mavericks 上的 gem install therubyracer v 0 10 2 未安装 我能够正常安装 therubyracer v 0 10 2 和 0 12 0 但不能安装 0 11 4 gem
  • 如何在 Android 中同时录制 2 个麦克风?

    我试图同时记录来自 2 个内置麦克风 底部 顶部 的音频信号 我可以使用拾取底部麦克风信号 MediaRecorder AudioSource MIC 和顶部麦克风信号使用 MediaRecorder AudioSource CAMCORD
  • 如何在运行时更改 Play 2 Framework DB 配置?

    我们正在使用 Play 2 1 1 及其内置 JPA 集成 JPA em ETC 我们如何动态更改 db pass 属性 Play application configuration 似乎 从 Play 2 1 开始是不可变的 或者我们至少
  • 如何在 Windows 上从源 tarball 安装 R 包?

    The 预测包 for R已经更新到版本2 12 但目前 CRAN 上仅提供 2 11 的 Windows 二进制文件 如何安装 R 包来源在 Windows 上 我知道这是一个老问题 但它在我的谷歌搜索中首先出现在同一问题上 尽管我知道答
  • 使用ajax分页加载页面后重新初始化其他javascript函数

    抱歉 这里完全是新手 如何加载其他插件 并在加载 ajax 生成的页面后让其他单独的脚本运行 这是我当前的代码 jQuery document ready function var mainContent load content site
  • HIbernate 映射异常:PropertyNotFoundException:找不到设置器

    我有两个 POJO STOCK 和 STOCK DETAILS 一对多关系 我还有一个接口 IAUDITLOG 有两种方法 我需要用两个 POJO 来实现这个接口 并且想在这些方法中编写一些实现 但是 当我使用子类 STOCKDETAILS
  • 将php数组插入mysql

    我有一个数组 product array 当我使用 print r product array 时 数组显示如下 Array 0 gt Array ID gt P00100 NAME gt Edina PRICE gt 20 00 1 gt
  • SQLAlchemy 联合括号问题

    我需要生成类似于以下内容的查询 select from where and order by limit union all select from where and order by limit order by 使用 SQLAlche
  • 无法在 webRTC 上下文中从 Android webView(chrome 框架)访问相机

    应用程序基于 webRTC 与 websocket Android Studio 2 3 2 最新版本 我已经使用 https 协议 自动播放 android 版本 7 0 最低 gt android 5 0 应用程序适用于所有支持的浏览器
  • symfony2 - 从数据库添加选择

    我希望使用自定义查询中的值填充 symfony2 中的选择框 我已经尝试尽可能地简化 控制器 class PageController extends Controller public function indexAction field
  • 如何检查滚动当前在 WPF DataGrid 中是否可见?

    如何检查 WPF DataGrid 当前是否显示滚动 垂直或水平 Horizo ntalScrollBarVisibility 和 VerticalScrollBarVisibility 用于设置行为 并将它们设置为 Auto Scroll
  • 流量管理器 + azure 网站:如何配置自定义 dns ssl

    我有一个自定义 DNS 条目通过 CNAME 记录映射到我的流量管理器设置 我还有指向我的 azure 网站端点的流量管理器 并且我有一个与我的网站上上传的自定义 DNS 相匹配的通配符证书 我在使用 ssl 时遇到问题 该文档不清楚如何在
  • 对 WinMain@16(代码块)的未定义引用

    当我编译 secrypt cpp 程序时 我的编译器显示错误 undefined reference to WinMain 16 我的代码如下 加密 h ifndef SECRYPT H define SECRYPT H void jReg
  • Java GUI显示网页并返回HTML

    我需要如下的工作流程 load xyz com in the browser window the browser is live meaning users can interact with it browser load http w
  • 在带有泛型参数的泛型方法中使用 Spring RestTemplate

    要将泛型类型与 Spring RestTemplate 一起使用 我们需要使用ParameterizedTypeReference 无法获取通用 ResponseEntity 其中 T 是通用类 SomeClass 假设我有一些课 publ