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

如何在Java DSL中发送grant_type=client_credentials作为post请求正文(Spring boot)

鲁涵意
2023-03-14

如上图所示,我将grant_type=client_credentials作为post正文发送。等效的curl命令是

curl--位置--请求后'https://localhost:8080/token'
--header'authorization:Basic

我可以将grant_type=client_credentials作为查询参数发送,并获得成功的响应。但由于公司政策,我们被要求不要用作查询参数,并要求将其发送到正文中。

我想出的代码是

public Message<Map<String, String>> getTokenGenRequest() {
        setHeaderMapper(new String[] { TransferConstants.AUTHORIZATION, TransferConstants.CONTENT_TYPE });
        Map<String, String> requestMap = new HashMap<String, String>();
        requestMap.put("grant_type", "client_credentials");
        return MessageBuilder.withPayload(requestMap)
                .setHeader(TransferConstants.AUTHORIZATION, getAuthCredentials())
                .setHeader(TransferConstants.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED).build();
    }


private void setHeaderMapper(String[] headerNames) {
        headerMapper.setOutboundHeaderNames(headerNames);

    }

但是,请求以“application/x-www-form-urlencoded”的形式编写[{grant_type=[client_credentials]}]发出,因此我没有得到任何响应。有人能告诉我代码有什么问题吗?

共有1个答案

袁泰
2023-03-14

{grant_type=[client_credentials]}是正确的x-www-form-urlencoded内容类型。参见HTTP规范:https://url.spec.whatwg.org/#urlencoded-serializing。

您可以尝试预先构建一个RequestEntity,将body作为该对的字符串,再手动添加这些header。

我的意思是您的getTokenGenRequest()应该返回消息 > ,但是,当然,最好与另一方(REST服务)协商,以确定他们真正想从您那里得到什么。可能你没有发送一些额外的标题,或者有一些他们不接受。

 类似资料:
  • 我已经写了下面的代码发送头,张贴参数。问题是我使用的是SendAsync,因为我的请求可以是GET或POST。我如何将POST Body添加到这个peice代码中,这样,如果有任何POST Body数据,它就会被添加到我发出的请求中,如果它是简单的GET或POST而没有Body,它就会以这种方式发送请求。请更新以下代码:

  • 代码如下: 这将向flask发送一个{“name”:“go”}JSON字典。Flask应该将语言名称追加到数组中,并在响应中返回完整的数组。现在,当我手动发送请求时,这就工作了,所以这不是Flask的错误。但是当我从iOS发送上述内容时,我在flask控制台中得到request.json==None。很明显,我送的是一具空尸体,但我不应该。你知道我哪里出了问题吗?

  • 问题内容: 我正在尝试发出POST请求,但无法完成。另一端什么也没收到。 这是应该如何工作的吗?我知道该功能,但我想我不能使用它,因为它不能用测试,对吗? 问题答案: 您基本上有正确的想法,只是发送错误的表格。该表格属于请求的正文。

  • 我在网上找到了这个脚本: 但我不明白如何与PHP一起使用它,也不明白params变量内部的内容是什么,也不明白如何使用它。我能帮个忙吗?

  • 我最近开始在我的android应用程序中使用改装,这是我添加用户的改装请求: 这里User是我想在服务器上注册的用户的模型类。问题是服务器需要Base64.encode()格式的json正文请求。有没有办法使用改装发送Base64编码数据? 我可以想到手动这样做: 然后在请求中传递这个。但是,我必须手动完成这项工作,并处理每个POST请求。有没有更干净的方法。

  • 问题内容: 我想从Java代码登录到应用程序。这是我的代码… 但我无法登录,它只返回登录页面。 如果有人可以,请帮助我了解我在做什么错。 问题答案: 错误 :-( www-form 中间有多余的空格) 正确