[英]Custom object mapper for Websockets in Spring 4
我正在使用Spring 4,并且正在关注Rossen Stoyanchev关于在Spring中使用websockets 的博客文章 。 我能够使一切正常工作,但我不确定在发送application/json
时使用自定义对象映射器的最佳方法是什么。
我注入SimpMessageSendingOperations
并调用convertAndSend
。 我不是肯定的,但我很确定我正在获得一个包含setMessageConverter
的SimpMessagingTemplate
(它实现了SimpMessageSendingOperations
)。 这个方法接受一个MessageConverter
并且有一个MappingJackson2MessageConverter
类,当然它使用它自己的内部ObjectMapper
,它无法重新定义。
所以我要做的就是创建一个自定义MessageConverter
并在其中定义我的自定义ObjectMapper
,这样我就可以将它传递给SimpMessagingTemplate
一个实例,然后我可以将它注入到我的类中。
这似乎可行,但也比我预期的更多。 我忽略了什么吗?
看起来有可能,但在Spring 4.0.1中会更容易
请参阅 - https://jira.springsource.org/browse/SPR-11184
引用上面的bug报告。
同时,使用@EnableWebSocketMessageBroker设置,您可以:
- 删除注释
- 扩展WebSocketMessageBrokerConfigurationSupport而不是实现WebSocketMessageBrokerConfigurer
- 覆盖brokerMessageConverter()方法并记住将@Bean保留在重写方法中
现在你可以这样做:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public boolean configureMessageConverters(List<MessageConverter> messageConverters) {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
// Avoid creating many ObjectMappers which have the same configuration.
converter.setObjectMapper(getMyCustomObjectMapper());
messageConverters.add(converter);
// Don't add default converters.
return false;
}
...
}
不幸的是, ObjectMapper
不能直接给MappingJackson2MessageConverter
的构造函数,这意味着它将首先创建一个无用的ObjectMapper。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.