重複の可能性:
HTTP GET とリクエスト本文
ここで、HTTP GET 経由でコンテンツを送信することを推奨していない議論をいくつか読みました。クライアント(Webブラウザ)経由で送信できるデータサイズには制限があります。また、GET データの処理もサーバーに依存します。以下の「リソース」セクションを参照してください 。
ただし、RestTemplate を使用して HTTP GET 経由でコンテンツを送信する可能性をテストするように依頼されました。春のフォーラムでいくつかの議論を参照しましたが、回答がありませんでした. (http Post 経由でのデータ送信は正常に機能することに注意してください)。ここでの議論では、代わりに POST を使用することを提案しています。
開発環境 - JBoss AS 5.1、Spring 3.1.3
クライアント
@Test
public void testGetWithBody()
{
// acceptable media type
List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
acceptableMediaTypes.add(MediaType.TEXT_PLAIN);
// header
HttpHeaders headers = new HttpHeaders();
headers.setAccept(acceptableMediaTypes);
// body
String body = "hello world";
HttpEntity<String> entity = new HttpEntity<String>(body, headers);
Map<String, Object> uriVariables = new HashMap<String, Object>();
uriVariables.put("id", "testFile");
// Send the request as GET
ResponseEntity<String> result = restTemplate.exchange(
"http://localhost:8080/WebApp/test/{id}/body",
HttpMethod.GET, entity, String.class, uriVariables);
Assert.assertNotNull(result.getBody());
}
サーバー@Controller
@RequestMapping(value = "/{id}/body", method = RequestMethod.GET)
public @ResponseBody
String testGetWithBody(@PathVariable String id,
@RequestBody String bodyContent)
{
return id + bodyContent;
}
問題- このテスト ケースを実行すると、500 Internal Server Error が返されます。デバッグ時に、コントローラーがヒットしていないことがわかりました。
RestTemplate はデータをリクエスト ボディとして送信する方法を提供しますが、サーバーがリクエスト ボディを処理できなかったためにエラーが発生するという理解でよろしいですか?
HTTP Get 経由で送信されたリクエスト本文が従来のものではない場合、なぜ RestTemplate は送信を許可する API を提供するのでしょうか? これは、 GET を介してリクエスト本文を処理できるサーバーがほとんどないということですか?
リソース- 春のフォーラムで RestTemplate を使用して HTTP GET 経由でボディを送信することに関するディスカッション
リソース- HTTP GET を介した本文の送信に関する一般的な議論
is-this-statement-correct-http-get-method-always-has-no-message-body