Мне нужно отправить запрос GET с телом json при загрузке Java / Spring. Мне известны советы против этого, однако я должен был сделать это по нескольким причинам: 1. Используемый мной сторонний API разрешает только запросы GET, поэтому POST не вариант. 2. Мне нужно передать очень большой параметр в теле (список из 8-10 тысяч символов, разделенных запятыми), поэтому добавление параметров запроса в URL также не вариант.
Я пробовал несколько разные вещи:
apache HttpClient отсюда: Отправка тела содержимого с HTTP-запросом GET в Java. Это дало некоторую ошибку непосредственно от самого API о плохом ключе.
URIComponentsBuilder отсюда: Spring RestTemplate GET с параметрами . Это просто добавило параметры в URL, что, как я объяснил ранее, не вариант.
restTemplate.exchange. Это казалось самым простым, но объект не прошел: https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html#exchange - java .lang.String-org.springframework.http.HttpMethod-org.springframework.http.HttpEntity- java .lang .Class- java .util.Map-
, а также, вероятно, еще одна или две вещи, о которых я забыл.
Вот что я говорю в Почтальоне . Я должен быть в состоянии передать оба параметра, приведенные здесь. Он работает нормально, если работает через Postman, но я не могу понять это в Java / Spring Boot.
Вот фрагмент кода из попытки restTemplate.exchange:
public String makeMMSICall(String uri, List<String> MMSIBatchList, HashMap<String, String> headersList) {
ResponseEntity<String> result = null;
try {
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
for (String key : headersList.keySet()) {
headers.add(key, headersList.get(key));
}
Map<String, String> params = new HashMap<String, String>();
params.put("mmsi", String.join(",", MMSIBatchList));
params.put("limit", mmsiBatchSize);
HttpEntity<?> entity = new HttpEntity<>(headers);
result = restTemplate.exchange(uri, HttpMethod.GET, entity, String.class, params);
System.out.println(result.getBody());
} catch (RestClientException e) {
LOGGER.error("Exception in makeGetHTTPCall :" + e.getMessage());
throw e;
} catch (Exception e) {
LOGGER.error("Exception in makeGetHTTPCall :" + e.getMessage());
throw e;
}
return result.getBody();
}
Спасибо за помощь!