簡體   English   中英

Spring 4中Websockets的自定義對象映射器

[英]Custom object mapper for Websockets in Spring 4

我正在使用Spring 4,並且正在關注Rossen Stoyanchev關於在Spring中使用websockets 的博客文章 我能夠使一切正常工作,但我不確定在發送application/json時使用自定義對象映射器的最佳方法是什么。

我注入SimpMessageSendingOperations並調用convertAndSend 我不是肯定的,但我很確定我正在獲得一個包含setMessageConverterSimpMessagingTemplate (它實現了SimpMessageSendingOperations )。 這個方法接受一個MessageConverter並且有一個MappingJackson2MessageConverter類,當然它使用它自己的內部ObjectMapper ,它無法重新定義。

所以我要做的就是創建一個自定義MessageConverter並在其中定義我的自定義ObjectMapper ,這樣我就可以將它傳遞給SimpMessagingTemplate一個實例,然后我可以將它注入到我的類中。

這似乎可行,但也比我預期的更多。 我忽略了什么嗎?

看起來有可能,但在Spring 4.0.1中會更容易

請參閱 - https://jira.springsource.org/browse/SPR-11184

引用上面的bug報告。

同時,使用@EnableWebSocketMessageBroker設置,您可以:

  1. 刪除注釋
  2. 擴展WebSocketMessageBrokerConfigurationSupport而不是實現WebSocketMessageBrokerConfigurer
  3. 覆蓋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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM