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

带有URL编码数据的Spring RestTemplate POST请求

海叶秋
2023-03-14

我是Spring的新手,正在尝试用RestTemplate执行rest请求。Java代码应该执行与下面curl命令相同的操作:

curl --data "name=feature&color=#5843AD" --header "PRIVATE-TOKEN: xyz" "https://someserver.com/api/v3/projects/1/labels"

但服务器拒绝了带有400 Bad request的RestTemplate

RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.add("PRIVATE-TOKEN", "xyz");
HttpEntity<String> entity = new HttpEntity<String>("name=feature&color=#5843AD", headers);
ResponseEntity<LabelCreationResponse> response = restTemplate.exchange("https://someserver.com/api/v3/projects/1/labels", HttpMethod.POST, entity, LabelCreationResponse.class);

共有1个答案

杜茂
2023-03-14

我认为问题是,当您尝试向服务器发送数据时,没有设置内容类型头,它应该是“application/json”或“application/x-www-form-urlencoded”中的一个。在您的示例中是:基于示例参数(名称和颜色)的“application/x-www-form-urlencoded”。此标头表示“我的客户机发送给服务器的数据类型”。

RestTemplate restTemplate = new RestTemplate();

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
headers.add("PRIVATE-TOKEN", "xyz");

MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
map.add("name","feature");
map.add("color","#5843AD");

HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<>(map, headers);

ResponseEntity<LabelCreationResponse> response =
    restTemplate.exchange("https://foo/api/v3/projects/1/labels",
                          HttpMethod.POST,
                          entity,
                          LabelCreationResponse.class);
 类似资料:
  • 我是Mule ESB的新手,并尝试向REST服务发送post请求。请求的主体是字符串形式,请求应该是x-www-form-urlencoded。我将有效负载设置为我的参数并将请求发送给REST服务,但我得到了一个异常: 我的Rest URL是:(#[restURL])${dms.host}/api/Rest/session/login.json 我的参数是(设置为有效载荷#[restBody]):

  • 目前,许多浏览器不随着 Content-Type 头一起发送字符编码限定符,而是根据读取 HTTP 请求确定字符编码。如果客户端请求没有指定请求默认的字符编码,容器用来创建请求读取器和解析 POST 数据的编码必须是“ISO-8859-1”。然而,为了向开发人员说明客户端没有指定请求默认的字符编码,在这种情况下,客户端发送字符编码失败,容器从getCharacterEncoding 方法返回 nu

  • 我有一个DropWizard项目,带有一个简单的表单提交endpoint: 我正在使用Swagger(swagger-jersey2-jaxrs 1.5.4)来记录我的API。但是,对于此endpoint,没有为表单参数生成文档。如果我更改

  • 响应:{“httpCode”:“400”,“httpMessage”:“请求错误”,“moreInformation”:“API请求中缺少一个或多个必需的API参数。”} 从日志中,我可以看到所有参数的传递方式如下:grant\u type=client\u credentials

  • 我试图通过参数在谷歌搜索,它的工作,当我搜索一个词,但一个我做空间它坏了我知道有一种方法来编码网址。 回溯: 还有一次,我用希伯来文写道: UnicodeEncodeError:“ascii”编解码器无法对位置14-18中的字符进行编码:序号不在范围内(128)

  • 问题内容: 这是对API调用的原始请求: 该请求返回成功(2xx)响应。 现在,我尝试使用发送此请求: 一切对我来说看起来不错,我不太确定自己张贴的错误是什么导致400响应。 问题答案: 用于GET样式的URL参数,用于POST样式的正文信息。在请求中 同时 提供 两种 类型的信息是完全合法的,您的请求也可以这样做,但是您已经将URL参数编码为URL。 您的原始帖子虽然包含 JSON 数据。可以为