首页 > 解决方案 > 有什么方法可以从 Spring 中的 AbstractHttpMessageConverter 方法 support() 中获取集合的泛型类型?

问题描述

我正在尝试创建一个 CSV 消息转换器以与Spring消息转换器一起使用,但我无法在类型为support(Class<?> clazz)时配置该方法。基本上我的端点是直接返回一个对象,而不是包裹在另一个对象中。clazzCollectionRESTCollection

使用反射,我唯一能得到的类型CollectionE显然不会给我太多的工作。

我已经手动尝试过,也尝试过使用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());
}

标签: javaspring-mvcreflection

解决方案


好吧,我想我找到了答案。它基本上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对象的确切参数的参数。


推荐阅读