2016-08-30 9 views
2

私はSpring-Bootを使用しています。私は基本的なREST-APIとしてJAX RSをWebSockets(Stompを使用)と組み合わせて使用​​したいと思います。しかし、これらの2つの図書館は紛争に終わるようです。SpringブートでStompを持つJAX RSとWebSocket

@Configuration 
@EnableWebSocketMessageBroker 
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { 

@Override 
public void configureMessageBroker(MessageBrokerRegistry config) { 
    config.enableSimpleBroker("/topic"); 
    config.setApplicationDestinationPrefixes("/app"); 
} 

@Override 
public void registerStompEndpoints(StompEndpointRegistry registry) { 
    registry.addEndpoint("/hello").setAllowedOrigins("http://localhost:8000").withSockJS(); 
} 

と、次のAppConfig:

私は、次のWebSocketConfigを持っている。両方のクラスがでコメントされている場合

public class AppConfig extends ResourceConfig { 
    public AppConfig() { 
     register(...); 
    } 
} 

問題は、発生した私はのAppConfig、私のソケット接続をコメントアウトした場合問題なく接続できます。それ以外の場合、私のREST-Apiは動作しますが、WebSocket-Connectionは確立できません(404例外)。おそらく/ hello呼び出しを「消費」しようとするJax RSコンポーネントに問題があると仮定し、それにマップされたリソースを見つけられません。

私の質問は、WebSocketMessageBrokerに渡されるように/ hello呼び出しを無視するようJax RSに指示するにはどうしたらいいのですか。

答えて

3

Spring-Boot Jersey: allow Jersey to serve static contentに関連しています。 Jerseyサーブレットのデフォルトのマッピングは/*で、すべてのリクエストが優先されます。デフォルトでは、見つからないルートは転送されません。

  • 変更ジャージーサーブレットのデフォルトのマッピング:

    あなたはカップルのオプションがあります。いずれかでこれを行うことができます

    1. @ApplicationPath("/new-root") annotation on top of the ResourceConfig`サブクラスを追加します。
    2. または、次のプロパティを使用して、application.propertiesファイルにマッピングを設定:spring.jersey.applicationPath
  • は、サーブレットフィルタの代わりに、サーブレットとしてジャージー実行を行います。これにより、Jerseyでプロパティを設定することができます。これにより、Jerseyアプリケーションにマップされていないサーブレットコンテナに要求されたルートを転送することができます。

    あなたは私が探していたまさに、this post

+0

のおかげで、このソリューションを仕事にどのように見ることができます。.. – Frame91

関連する問題