web-dev-qa-db-ja.com

クエリパラメータが異なる2つのGETメソッド

同じGETURIを作成できますが、クエリパラメーターは異なりますか?

たとえば、2つのREST GET URI:

/questions/ask/?type=rest
/questions/ask/?byUser=john

現在、RESTサービスは、2つのGETメソッドを別個のものとして認識せず、最初に宣言された1つのGETメソッドのみと見なします。

  1. なぜこのように動作するのですか?
  2. クエリパラメータが異なる2つのGETメソッドを作成する方法はありますか?

任意のリソースを引用していただければ幸いです。

10
ritesh

resource[〜#〜] path [〜#〜]によって一意に識別されるため(パラメータではなく) 。定義する2つのリソースは同じPATHを持っています。

@Path("/questions/ask")

JSR-311仕様 によると:

サブリソースメソッドと呼ばれるこのようなメソッドは、通常のリソースメソッド(セクション3.3を参照)と同様に扱われますが、メソッドは、URIを連結して作成されたURIテンプレートに一致するリクエストURIに対してのみ呼び出されます。メソッドのURIテンプレートを使用したリソースクラスのテンプレート

データモデルには2つの異なるリソースが含まれているため、パスが異なる2つのrestメソッドを作成することをお勧めします。

@Path("/questions/ask/type")
@Path("/questions/ask/user")

これはRESTfulな方法です。これは、1つのURIが1つのリソースのみを表し、オーバーロードが発生しないようにするためです。 1つのURIが複数のリソースを表す場合、それはどこかで間違っていることを意味します。

21
darijan

Uriが同じでリクエストパラメータが異なる2つのゲッターを持つことはできません。あなたができることは、多くのリクエストパラメータを持つ1つのgetterメソッドを持つことです。

@RequestMapping(value = "uri", method = RequestMethod.GET)
public String test(@RequestParam String type, @RequestParam String byUser) 

次に、2つのパラメーターを使用して呼び出します

/questions/ask/?type=rest&byUser=john

これらのパラメータを適切に処理するには、testメソッド内のロジックを処理する必要があります。

ダリジャンに関しては、下線の論理が何であるかを考慮して、2つの方法または1つの方法を選択するかどうかを決めるのは自由だと思います。 2つの方法を使用する場合は、2つのuriを使用します。ビジネスロジックが1つのuriで問題ない場合は、私が答えた方法を使用してください

5

RESTリクエストをオーバーロードすることはできません。

ビジネス層では、2つの変数のどちらが設定されているかを確認してから、必要な処理を行う必要があります。

5
JHS

リクエストに存在するリクエスト/クエリパラメータに関して、残りのエンドポイントをオーバーロードできます。これが私のユースケースを解決した答えです: 異なる引数で同じURLパターンに対して2つのメソッドを作成します

1
arshellium