繁体   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