Пользовательский объект сопоставления для веб-сокетов в 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 вы можете:
- удалить аннотацию
- расширить 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.