我正在使用Spring 4,并在Rossen Stoyanchev's blog post关注在Spring中使用websockets。我能够让一切正常运行,但我不确定在发送application/json
时使用自定义对象映射器的最佳方式。
我正在注射SimpMessageSendingOperations
并致电convertAndSend
。我不是肯定的,但我很确定我得到的SimpMessagingTemplate
(它实现SimpMessageSendingOperations
)包含setMessageConverter
。此方法需要MessageConverter
并且有一个MappingJackson2MessageConverter
类,但当然它使用它自己的内部ObjectMapper
,无法重新定义。
所以我要做的就是创建一个自定义MessageConverter
并在其中定义我的自定义ObjectMapper
,这样我就可以将其传递给SimpMessagingTemplate
的实例,然后我可以注入我的课程。
这似乎可行,但也比我预期的更多参与。我忽略了什么吗?
答案 0 :(得分:3)
看起来可行,但在Spring 4.0.1中会更容易
请参阅 - https://jira.springsource.org/browse/SPR-11184
从上面的错误报告中引用。
与此同时,通过@EnableWebSocketMessageBroker设置,您可以:
- 删除注释
- 扩展WebSocketMessageBrokerConfigurationSupport而不是实现WebSocketMessageBrokerConfigurer
- 覆盖brokerMessageConverter()方法并记住将@Bean保留在覆盖方法中
醇>
答案 1 :(得分:0)
如今,您可以这样做:
@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。