[英]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.