当前位置: 首页 > 知识库问答 >
问题:

如何在Spring boot中使用带有承载令牌和表单数据的REST模板调用REST Api

李勇
2023-03-14

我正在使用Postman调用一个rest api,它使用以下请求给出了成功的响应(200确定),

正文=>form-data=>key:companyId,值: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个答案

越学博
2023-03-14

您必须配置RESTTemplate:add FormHttpMessageConverter

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

在发送请求时,必须将mediatype.application_form_urlencode设置为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);
 类似资料:
  • 使用邮递员,我可以毫无问题地获得令牌。如果单击和,我会得到以下代码片段: 当我尝试在Rest Assured中对请求建模时,我得到了一个400错误,但不清楚为什么: 我哪里出了问题很明显吗?是否应该将键/值传递到中?

  • 问题内容: 我正在向Django的模板传递一个函数,该函数返回一些记录。我想调用此函数并遍历其结果。 那不行 我试图将函数的返回值设置为变量并遍历该变量,但是似乎没有办法在Django模板中设置变量。 有什么正常的方法吗? 问题答案: 你不能调用在模板中需要参数的函数。写一个模板标签或过滤器。

  • 我可以使用类似的代码和承载令牌进行GET,但似乎无法完成POST。 当我将Json、URL和承载令牌复制/粘贴到Postman中时,效果非常好。但从C#执行此操作时,会出现以下错误: “状态代码:400,原因短语:'错误请求',版本:1.1,内容:System.Net.Http.StreamContent,标题:{传输编码:分块连接:保持活动预期CT:最大年龄=604800,报告uri=”http

  • 如果一个类用同一个函数继承多个类,它如何调用每个继承类的函数而不手动指定每个类? 示例代码如下: 我可以通过手动指定接口来调用接口: 但是对于的,考虑到还会有,,我如何编写代码来调用每个继承接口的。

  • 我在调用rest api时尝试使用承载令牌时遇到一些问题。 我尝试了两种方法,结果相同: 我在azure门户中创建了一个应用注册,并授予它使用devops api进行用户模拟的权限。 我在中创建了一个应用程序https://app.vsaex.visualstudio.com/并授予it项目/团队管理权限。 对于我的代码,我使用了这个(当我使用PAT进行身份验证时有效) 我使用以下示例获取令牌:h

  • 嘿,我想弄清楚如何为REST API POST调用使用OAuth授权令牌。 文件规定: 如果发生此错误,您的应用程序可以通过重新运行相应的流来请求新的访问令牌。 目前我的VB. net代码是这样的: 我不断收到一个错误:远程服务器返回一个错误:(401)未经授权。 我在下面的帖子中发现了这一点: Yammer API要求OAuth数据位于标头中。如果您查看他们获取数据的示例,您将看到请求如下所示。