0

Websocket で STOMP を使用する Spring-MVC コントローラーがあります。おそらくSpringによって、サブスクリプションがエスケープされたときにSTOMP JavaScriptクライアントで受信した文字列を除いて、すべてが正常に機能します。

Web と公式ドキュメントで見つけることができるすべての例は、戻り値の型に POJO を使用し、Jackson の JSON 変換を自動的に使用します。返される JSON は完全に動的であるため、これは望ましくありません。このナンセンスをオフにするにはどうすればよいですかだから私はプレーンな文字列を返すことができます!?

@Controller
public class FooController {

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

customJsonConversion の出力が {"x":1} の場合、受け取った JSON の形式は "{\"x\":1}" です。

4

1 に答える 1

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