【问题标题】:Return raw strings from @SubscribeMapping with STOMP/WebSockets/Spring使用 STOMP/WebSockets/Spring 从 @SubscribeMapping 返回原始字符串
【发布时间】:2014-07-04 12:42:22
【问题描述】:

我有一个使用 STOMP over websockets 的 Spring-MVC 控制器。除了订阅时在我的 STOMP JavaScript 客户端中收到的字符串之外,一切都正常工作,可能是由 Spring 转义的。

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

@Controller
public class FooController {

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

如果 customJsonConversion 的输出是 {"x":1}

【问题讨论】:

    标签: spring-mvc spring-websocket


    【解决方案1】:

    您似乎想禁用杰克逊转换。默认注册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;
    }
    

    【讨论】:

    • 谢谢。理想情况下,我想与一些使用原始 JSON 的控制器和其他使用 POJO 的控制器混合和匹配,遗憾的是它们没有让注释级别的配置变得更容易
    • 再看一下,似乎 messageconverters 的工作方式,即通过 isSupported() 检查,StringMessageConverter 无论如何都应该在 Jackson 转换器之前,然后你一起支持 raw 和 jackson。
    • SPR-11961 现在计划用于 4.1。关于混合和匹配,我们可以考虑内容类型的方法级控制(例如@SubscribeMapping 上的属性)。获得一个我们可以考虑的请求,其中包含您想到的一两个场景的更多细节,这将很有用。
    猜你喜欢
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 2018-03-30
    • 2014-11-13
    • 1970-01-01
    • 2012-12-12
    相关资源
    最近更新 更多