フロントエンドのデータベースからエンティティのリストを取得したいと思いました。だから私はPOST REST Spring MVCでのHTTP呼び出しを書いた。
しかし、データベースからデータを取得する必要があるときはいつでもGET呼び出しを好むと述べているHTTPドキュメントを読みました。 POST呼び出しからGET呼び出しへの呼び出しangular JSと整数のリストを渡します。しかし、GET HTTPには多くの欠点があります。 like:URLの長さが制限されています。データベースから1000エンティティをフェッチする必要がある場合を考慮してください。
エンティティを取得する方法、またはGET REST整数のリストについては、Spring MVCのAPI(エンティティのIDを参照)を記述する方法)を教えてください。
例:本の表に100冊の本があるとしましょう。しかし、ほんの数冊の本が欲しいだけです。 POST呼び出しで整数のリストにこのIDのリストを渡すのはそのためです。
現在、これをGET呼び出しに変換する方法が行き詰まっています。要するに、GET REST呼び出しを通じて整数のリストを渡す方法。
[〜#〜] rest [〜#〜] イデオロギーでは、リソースIDがリソース名の後に渡されるため、HTTPパス変数を介したバリアントが好まれます ' http: //../resource/id 'およびHTTPパラメータがフィルタリングに使用されます。
HTTPパラメーターを介してIDを渡す必要がある場合は、以下の例を参照してください。
これがSpring MVCコントローラーメソッドです:
@RequestMapping(value = "/books", params = "ids", method = RequestMethod.GET)
@ResponseBody
Object getBooksById_params(@RequestParam List<Integer> ids) {
return "ids=" + ids.toString();
}
そして、次のバリアントを使用して電話をかけることができます:
このディスカッションもご覧ください: https://stackoverflow.com/a/9547490/1881761
また、パス変数を介してIDを渡すこともできます。以下の例を参照してください。
@RequestMapping(value = "/books/{ids}", method = RequestMethod.GET)
@ResponseBody
Object getBooksById_pathVariable(@PathVariable List<Integer> ids) {
return "ids=" + ids.toString();
}
そして、あなたの呼び出しは次のようになります: http:// server:port/ctx/books/5,65,42
GET HTTP呼び出しの長所:データの取得に常に使用されます。(この観点から:それぞれのすべての取得に対して実装する必要があります)
HTTPパラメータを通じて
HTTPパラメーターを介してIDを渡す必要がある場合は、以下の例を参照してください。
これがSpring MVCコントローラーメソッドです:
@RequestMapping(value = "/book", params = "ids", method = RequestMethod.GET)
@ResponseBody
Object getBooksById_params(@RequestParam List<Integer> ids) {
return "ids=" + ids.toString();
}
正常に動作しますが、例外的なケースとして、URIが2048文字を超えていると言います。リストに多数のIDがあることを意味します(例:1000)
次に、例外をスローします:414(Request-URI Too Long)を返します
これは http://www.checkupdown.com/status/E414.html
いくつかの調査の後、私の理解は次のとおりです。HTTPプロトコルは、URIの長さに事前の制限を課しません。サーバーは、提供するすべてのリソースのURIを処理できなければならず(MUST)、そのようなURIを生成できるGETベースのフォームを提供する場合は、無制限の長さのURIを処理できる必要があります(SHOULD)。 URIがサーバーが処理できる長さよりも長い場合、サーバーは414(Request_URI Too Long)ステータスを返す必要があります(SHOULD)。
私はまた、GET URIの長さを取得するようなサイトを通過しました。
したがって、結論は、POST呼び出しに実行時に可変長のURIが存在する可能性がある場合に呼び出され、そのような例外が発生しないためです[return 414(Request-URI Too Long)]
または、複雑なクエリを許可するには、クエリに独自の残りの言語を指定する必要があります。したがって、クエリを作成するには、POST to/library/queryを作成し、次にPOST/library/query/12345をデータ{id:34次に、GET/library/books?query = 12345でクエリを実行します