2016-03-19 13 views
1

私はSpring's STOMP+WebSocket implementationを試しています。複数のパラメータを取るサービス(サーバで)を呼び出すことができるのだろうか?複数のパラメータを受け入れるSTOMPで呼び出されるサービスを持つこと

多くのパラメータを1つのクラスにカプセル化し、そのクラスのオブジェクトを取り込むサービスを定義することができます。しかし、それは私が探しているものではありません。私は同時にRESTとSTOMPを介して1つのサービスを呼び出すことができるようにしたい。また、RESTサービスはすべて複数のパラメータメソッドについてのものなので、STOMPを通じてどのように呼び出すことができますか?

+0

_ _本当にない "RESTサービスは、複数のパラメータ方法についてのすべてです"。パラメータはURLの一部ですが、そうではありませんか? – zeroflagL

+0

Spring RESTでは '@PathVariable'、' @ RequestParam'と '@ RequestBody'(AFAIK)があり、あなたのサービスは任意の個数で受け取ります(一意のリクエストボディを除く)。しかし、STOMP + WebSocketに行くと、私は似たものを見ることができません。 – Mehran

+1

Spring STOMPサポートには '@ DestinationVariable'があります。しかし、RESTとSTOMPは本質的に異なっています。したがって、同じエンドポイントを共有したり、同じサービス(機能など)を提供する可能性もあります。 – zeroflagL

答えて

1

@RequestParamはクエリパラメータ用であり、クライアントがクエリではなくサーバーにデータを送信するときにはあまり意味がありません。 RESTとSTOMPの両方で、メタ情報のヘッダーを使用できます。

@PathVariableの等価物は@DestinationVariableであり、同じ方法で使用されます。

@RequestBodyに相当するのは@Payloadですが、Springではアノテーションのないメソッドパラメータがペイロードであると仮定しているため、実際には必要ありません。

例:

@RequestMapping("/foo/bar/{id}") 
@ResponseBody 
@MessageMapping("/foo/bar/{id}") 
@SendTo("/baz") 
public Answer method(
    @PathVariable @DestinationVariable int id, 
    @RequestBody Message message, 
    @RequestHeader("foo") @Header("foo") String foo) { 
関連する問題