如何在 Spring Boot 中使用带有 Bearer Token 和 form-data 的 Rest Template 调用 REST Api
Posted
技术标签:
【中文标题】如何在 Spring Boot 中使用带有 Bearer Token 和 form-data 的 Rest Template 调用 REST Api【英文标题】:How to call a REST Api using Rest Template with Bearer Token and form-data in Spring boot 【发布时间】:2020-06-22 23:18:52 【问题描述】:我正在使用 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);
【问题讨论】:
【参考方案1】:你必须配置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);
【讨论】:
我认为现在响应类存在一些问题。你能展示一下吗(响应类)? 谢谢它的工作,我的响应 pojo 类没有正确构造。以上是关于如何在 Spring Boot 中使用带有 Bearer Token 和 form-data 的 Rest Template 调用 REST Api的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 spring-boot 的情况下在 spring-webflux 中加载配置?
如何在 Spring Boot 的 @RestController 注释用于创建请求处理程序的方法中使用带有参数的构造函数
如何在带有Github的Spring Boot上使用OIDC
如何在带有嵌入式 tomcat 的 Spring Boot App 中设置域名
如何在 Spring Boot 中使用带有 Bearer Token 和 form-data 的 Rest Template 调用 REST Api