Пользовательский объект сопоставления для веб-сокетов в Spring 4

Я использую Spring 4 и следил за сообщением Россена Стоянчева в блоге об использовании веб-сокетов в Spring. Я смог заставить все работать, но я не уверен, что лучший способ использовать пользовательский объект сопоставления при отправке application/json,

Я делаю инъекцию SimpMessageSendingOperations и звонит convertAndSend, Я не уверен, но я уверен, что я получаю SimpMessagingTemplate (это реализует SimpMessageSendingOperations) который содержит setMessageConverter, Этот метод занимает MessageConverter и есть MappingJackson2MessageConverter класс, но, конечно, он использует свой собственный внутренний ObjectMapper который не может быть переопределен.

Так что, похоже, мне нужно создать MessageConverter и определить мой обычай ObjectMapper в нем, чтобы я мог передать его экземпляру SimpMessagingTemplate что я могу затем ввести в мои классы.

Кажется, что это будет работать, но также и более сложный, чем я ожидал. Я что-то пропускаю?

2 ответа

Решение

Похоже, что это возможно, но будет проще в Spring 4.0.1

Смотрите - https://jira.springsource.org/browse/SPR-11184

Цитата из сообщения об ошибке выше.

В то же время, с настройкой @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.

Другие вопросы по тегам