3

以下のサンプルのパラメーターではなく、任意の数のパラメーターを受け入れる必要があるRESTfulサービスを構築しています。

次のサービスルーチンを想定

@RequestMapping("/start/id/{id}", RequestMethod.GET)
public void startService(@PathVariable String id) {...}

に基づくクライアントの実装がありますRestTemplate

restTemplate.getForObject("/start/id/{id}", null, id);

質問:しかし、それが数千になる可能性があることを考えるとids、を使用して1つのリクエストですべてのパラメーターを送信するためにどのような安らかなアプローチが必要RestTemplateですか?私は提案を見てきました

  • リクエスト本文をGETリクエストに追加します-では不可能と思われRestTemplateますか?
  • idに区切り文字を使用します(例:id1|id2|....|idn)-ハックのようです
  • 最初にパラメータを入力してから、GETを発行してIDを参照します-ダブルリクエスト、直感的ではないようです
  • 複数のURLパラメータの追加(?id=foo&id=bar&.....&id=foobar

私は同様の質問を知っています(call-a-restful-service-with-many-parametershow-to-create-rest-urls-without-verbscan-you-build-a-truly-restful-service-that-takes -many-parameters)は以前に質問されましたが、満足のいく答え、または少なくともに基づく答えを見つけるのは難しいことがわかりましたRestTemplate

4

2 に答える 2

2

RESTful 設計のどの部分も、URL 構造がコレクション全体を解決できる必要があるとは述べていないと思います。1 番目 (要求パラメーター) と 3 番目 (url パラメーター) の提案がおそらく最適です。

私は最初のものをお勧めします。私はそれがresttemplateで許可されていると確信しています。あなたが提供したドキュメントを見て、post メソッドの 1 つを実装するだけです。それぞれがリクエストをパラメーターとして受け取ります。getRequestParameters()その中には、ID を含むリクエスト本文から json/xml を解析するために使用できるメソッドの何らかの実装があると確信しています。

または、さらに良いことに、これらすべての ID はどのように関連していますか? それらはすべて共通の親リソースを持っていますか? もしそうなら、あなたは次のようなことをすることができます(そしておそらくそうすべきです...

/commonparent/{parentId}

次に、リクエスト ハンドラー内ですべての ID をクエリし、通常どおり処理します。

于 2011-12-20T16:50:38.073 に答える
1

すべての ID にクエリ パラメータを使用できます。

/search?ids=1,2,3,4,5,6,7

次に、カンマでトークン化し、検索を行います。これを GET クエリ文字列パラメーターとして発行すると、URL の最大長に制限されることに注意してください。

于 2011-12-20T16:46:22.377 に答える