如何在 Spring boot 中使用带有 Bearer Token 和表单数据的 Rest Template 来调用 REST Api

问题描述 投票:0回答:1

我正在使用 Postman 调用 REST API,它使用以下请求给出了成功的响应(200 OK),

方法:POST

授权=> 类型:不记名令牌=> 代币:saflsjdflj

身体=> 表单数据 => 关键:公司ID, 价值:123456

但是当我在 Spring Boot 中使用 Rest 模板调用这个 api 时,它给出了 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);
java spring-boot rest spring-security oauth
1个回答
2
投票

你必须配置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);
© www.soinside.com 2019 - 2024. All rights reserved.