使用STOMP / WebSockets / Spring从@SubscribeMapping返回原始字符串

时间:2014-07-04 12:42:23

标签: spring-mvc spring-websocket

我有一个使用STOMP而不是websockets的Spring-MVC控制器。一切正常,除了我的STOMP JavaScript客户端收到的字符串,因为订阅已被转义,大概是Spring。

我可以在网络和官方文档中找到的所有示例都使用POJO作为返回类型,然后自动使用Jackson JSON转换 - 我不希望这个因为我返回的JSON完全是动态的 - 我该如何切换这个废话,所以我只能返回一个普通的字符串!?

@Controller
public class FooController {

    @SubscribeMapping("/foo")
    public String getUser() { 
        String json = customJsonConversion();
        return json;
    }

JSON收到的外观是这种形式“{\”x \“:1}”如果customJsonConversion的输出是{“x”:1}

1 个答案:

答案 0 :(得分:1)

看起来你想禁用Jackson转换。它默认注册为AbstractMessageBrokerConfiguration#brokerMessageConverter()

if (registerDefaults) {
    if (jackson2Present) {
        DefaultContentTypeResolver resolver = new DefaultContentTypeResolver();
        resolver.setDefaultMimeType(MimeTypeUtils.APPLICATION_JSON);
        MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
        converter.setContentTypeResolver(resolver);
        converters.add(converter);
    }
    converters.add(new StringMessageConverter());
    converters.add(new ByteArrayMessageConverter());
}

要禁用此功能,您应该在自定义WebSocketMessageBrokerConfigurer中执行此操作:

public boolean configureMessageConverters(List<MessageConverter> messageConverters) {
   messageConverters.add(new StringMessageConverter());
   messageConverters.add(new ByteArrayMessageConverter());
   return false;
}