0

我有一个使用 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}

4

1 回答 1

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;
}
于 2014-07-04T13:02:20.277 回答