Возможный дубликат:
HTTP GET с телом запроса
Я читал здесь несколько дискуссий, которые не защищают отправку контента через HTTP GET. Существуют ограничения на размер данных, которые могут быть отправлены через клиентов (веб-браузеры). И обработка данных GET также зависит от серверов. Пожалуйста, обратитесь к разделу Ресурсы ниже.
Однако меня попросили проверить возможность отправки контента через HTTP GET с помощью RestTemplate. Я ссылался на несколько дискуссий на форуме spring, но на них не было ответа. (Пожалуйста, обратите внимание на отправку данных через http Post работает отлично). В обсуждении здесь предлагается использовать POST.
dev env - 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?
Ресурсы - обсуждение отправки тела через HTTP GET с использованием RestTemplate в spring forum
Ресурсы - Общие обсуждения по отправке тела через HTTP GET
is-this-statement-correct-http-get-method-always-has-no-message-body