1

我正在使用 Spring 4,并且正在关注Rossen Stoyanchev关于在 Spring 中使用 websockets的博客文章。我能够让一切正常工作,但我不确定在发送application/json.

我正在注入 aSimpMessageSendingOperations并调用convertAndSend. 我不是很肯定,但我很确定我得到了一个SimpMessagingTemplate(它实现SimpMessageSendingOperations了),其中包含一个setMessageConverter. 这个方法需要一个MessageConverter并且有一个MappingJackson2MessageConverter类,但当然它使用它自己的内部ObjectMapper,不能重新定义。

所以看起来我必须做的是创建一个自定义MessageConverter并在其中定义我的自定义ObjectMapper,以便我可以将它传递给一个实例,SimpMessagingTemplate然后我可以将其注入到我的类中。

这似乎可行,但也比我预期的更多。我忽略了什么吗?

4

2 回答 2

3

Looks like it is possible, but will be made easier in Spring 4.0.1

See - https://jira.springsource.org/browse/SPR-11184

Quote from the bug report above.

In the mean time, with @EnableWebSocketMessageBroker setup you can:

  1. remove the annotation
  2. extend WebSocketMessageBrokerConfigurationSupport instead of implementing WebSocketMessageBrokerConfigurer
  3. override brokerMessageConverter() method and remember to keep @Bean in the overriding method
于 2013-12-06T19:15:14.080 回答
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。

于 2018-10-12T11:14:52.677 回答