java - 有什么方法可以从 Spring 中的 AbstractHttpMessageConverter 方法 support() 中获取集合的泛型类型?
问题描述
我正在尝试创建一个 CSV 消息转换器以与Spring
消息转换器一起使用,但我无法在类型为support(Class<?> clazz)
时配置该方法。基本上我的端点是直接返回一个对象,而不是包裹在另一个对象中。clazz
Collection
REST
Collection
使用反射,我唯一能得到的类型Collection
是E
显然不会给我太多的工作。
我已经手动尝试过,也尝试过使用TypeUtils.genericArrayType(clazz)
from等辅助工具Apache Commons
。我能想到的唯一解决方法是始终返回 true 并验证writeInternal(Object o, HttpOutputMessage message)
方法内的类型。
这是AbstractMessageConverterMethodProcessor
检索端点返回类型的类的实现中的错误还是我遗漏了什么?
顺便问一下,这是Spring实现中返回类型的方法吗?
protected Class<?> getReturnValueType(Object value, MethodParameter returnType) {
return (value != null ? value.getClass() : returnType.getParameterType());
}
解决方案
好吧,我想我找到了答案。它基本上Java's
type erasure
是在运行时删除Collection
类型信息。还有另一个抽象类AbstractGenericHttpMessageConverter
可以让我实现public boolean canWrite(Type type, Class<?> clazz, MediaType mediaType)
和protected void writeInternal(Object o, Type type, HttpOutputMessage outputMessage)
方法,其中包含Type
可用于确定Class
对象的确切参数的参数。
推荐阅读
- dataframe - 基于joined-dataframe列是否加入多个数据框
- azure-devops - 在 azure devops 管道中重用 YAML 序列
- excel - 如何避免使用选择/激活
- jenkins - 在 Jenkins 中使用 HTML 发布者插件时报告未完全显示
- vue.js - vue/vuex 导入插件/模块或某些 nginx 配置中的路径有问题
- c++ - Boost.Log v2 测量执行时间
- python-docx - 如何将样式从 .dotx 复制到我的 .docx 文档?
- python - 在 python 中使用来自不同项目的代码的正确方法是什么?
- javascript - 菜单项打不开
- javascript - 多个目的地谷歌距离矩阵api