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