带有HttpClient的帖子返回错误请求

时间:2018-08-29 13:33:32

标签: java post apache-httpclient-4.x

我正在使用Java,Spring boot和Apache HttpClient尝试发送发布请求。我要访问的资源文档可在以下位置找到:

https://docs.enotasgw.com.br/v2/reference#incluiralterar-empresa

下面是我的代码:

CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost post = new HttpPost(incluirEmpresa);
post.setHeader("Content-Type", "application/json");
post.setHeader("Accept", "application/json");
post.setHeader("Authorization", "Basic " + apiKey);
try {
    StringEntity entity = new StringEntity(json);
    //tried to add these two lines to see if they would fix the error, but it is the same
    entity.setContentEncoding("application/json");
    entity.setContentType("application/json");
    post.setEntity(entity);
    System.out.println(json);
    System.out.println("======================");
    CloseableHttpResponse response = httpClient.execute(post);
    System.out.println(response.getStatusLine().getReasonPhrase() + " - " + response.getStatusLine().getReasonPhrase());
    idEmpresa = response.getEntity().getContent().toString();
}

我的回答是400-错误请求。在上面的交互式文档链接上,当我发布Json时,我收到重复输入的错误,这是我期望的,因为要发送的信息已经在数据库中。

由于交互式文档返回重复错误,因此我知道问题不在我的json格式之内,而是在我的发布请求中。该文档包含有关C#的示例,但不包含基于Java的示例,这就是我正在使用的。

顺便说一句,如果相关,则json变量是一个字符串。

有人可以指出我的邮政编码有什么问题吗?

1 个答案:

答案 0 :(得分:0)

发现我所缺少的。 在查看发送到API的内容之后,我注意到json的格式不正确。因此,我进行了一些研究,发现至少就我而言,仅设置带有内容类型的标头还不够,我还必须将被设置为HttpPost的Entity设置为做到这一点,我必须对此进行更改代码行:

StringEntity entity = new StringEntity(json);

对此:

StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);

更改之后,请求开始按预期运行。