Generics Spring JMS和参数化类型(@JmsListener,带有例如List<;String>;参数)?
我希望能够使用Generics Spring JMS和参数化类型(@JmsListener,带有例如List<;String>;参数)?,generics,spring-jms,jmstemplate,Generics,Spring Jms,Jmstemplate,我希望能够使用JmsTemplate.convertAndSent(…)发送例如List类型的值,然后使用带有@JmsListener注释的方法接收该值,该方法采用List类型的参数 然而,将消息负载类型存储为消息属性的默认方法似乎不支持泛型 如果我查看MappingJackson2MessageConverter.getJavaTypeFormMessage(Message)我会看到: Class<?> typeClass = ClassUtils.forName(typeId,
JmsTemplate.convertAndSent(…)
发送例如List
类型的值,然后使用带有@JmsListener
注释的方法接收该值,该方法采用List
类型的参数
然而,将消息负载类型存储为消息属性的默认方法似乎不支持泛型
如果我查看MappingJackson2MessageConverter.getJavaTypeFormMessage(Message)
我会看到:
Class<?> typeClass = ClassUtils.forName(typeId, this.beanClassLoader);
return this.objectMapper.getTypeFactory().constructType(typeClass);
Class-typeClass=ClassUtils.forName(typeId,this.beanClassLoader);
返回此.objectMapper.getTypeFactory().constructType(typeClass);
因此,人们似乎只能从typeId
获取类
,而无法获取参数化类型
的实例
是否有一些巧妙的方法混合我在这里缺少的类型参数信息?例如,以某种方式使用
参数化类型引用
?我能做的最好的事情就是在发送端创建一个参数化类型的子类。例如,我有:
public class StringList extends ArrayList<String> {
public StringList(Collection<String> c) {
super(c);
}
// Empty constructor needed by Jackson.
public StringList() { }
}
也就是说,我必须将我的列表
转换为字符串列表
,这样传出的消息将被标记为字符串列表
类型
然后在接收端,我可以假装StringList
不存在,然后像这样使用List
:
@JmsListener(destination = "my-destination")
public void consumerList(List<String> list) { ... }
@JmsListener(destination=“我的目的地”)
公共无效用户列表(列表){…}
也就是说,Jackson在封面下创建了一个StringList
的实例,但我将其作为List
使用
这并不可怕-但是如果不需要创建List
的StringList
子类(然后将我的真实列表的内容复制到StringList
的实例中),那就更好了
@JmsListener(destination = "my-destination")
public void consumerList(List<String> list) { ... }