Как вызвать REST Api, используя Rest Template с Bearer Token и form-data при загрузке Spring - PullRequest
1 голос
/ 11 марта 2020

Я вызываю api rest с помощью Postman, и он дает успешный ответ (200 OK), используя следующий запрос,

метод: POST

Authorization => Тип: Bearer Token => Token : saflsjdflj

Body => form-data => Key: companyId, Значение: 123456

Но когда я вызываю этот API-интерфейс при весенней загрузке с использованием шаблона rest, он выдает 400 неверных запросов. Код показан ниже,

HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "Bearer " + token);

HashMap<String, String> requestBody = new HashMap<>();
requestBody.put("companyId", "123456");

HttpEntity requestEntity = new HttpEntity<>(requestBody, headers)

ResponseEntity<CompanyResponse> response = restTemplate.exchange(uri, HttpMethod.POST, requestEntity, CompanyResponse.class);

1 Ответ

1 голос
/ 11 марта 2020

Вы должны настроить restTemplate: добавить FormHttpMessageConverter

RestTemplate restTemplate = new RestTemplateBuilder()
                .messageConverters(
                        new MappingJackson2HttpMessageConverter(objectMapper()),
                        new FormHttpMessageConverter())
                .build()

И при отправке запроса вы должны установить MediaType.APPLICATION_FORM_URLENCODED как contentType и использовать MultiValueMap вместо HashMap в качестве тела запроса:

HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "Bearer " + token);
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

MultiValueMap<String, String> requestBody = new LinkedMultiValueMap<>();
requestBody.put("companyId", "123456");

HttpEntity requestEntity = new HttpEntity<>(requestBody, headers)

ResponseEntity<CompanyResponse> response = restTemplate.exchange(uri, HttpMethod.POST, requestEntity, CompanyResponse.class);
...