在Java中使用JSON进行HTTP POST

16 浏览
0 Comments

在Java中使用JSON进行HTTP POST

我想用Java以JSON格式进行简单的HTTP POST请求。

假设URL是www.site.com,并且接受值{"name":"myname","age":"20"},标记为'details'。我该如何创建POST请求的语法?

我在JSON的Javadocs中也找不到POST方法。

0
0 Comments

问题的出现原因:

问题出现的原因是在使用Apache HttpClient的版本4.3.1或更高版本时,发送HTTP POST请求时,未明确添加content-type头部信息。

解决方法:

为了解决这个问题,可以在发送请求之前,通过添加以下代码来明确地设置content-type头部信息:

request.addHeader("content-type", "application/json");

这样可以确保请求被正确地识别为JSON格式。

另外,在使用较新版本的httpclient时,也可以采用以下方法来设置content-type:

StringEntity entity = new StringEntity(params.toString(), ContentType.APPLICATION_JSON);

这样可以将请求内容以JSON格式进行编码,并同时设置content-type头部信息。

在使用Apache HttpClient发送HTTP POST请求时,特别是在较新版本的httpclient中,需要明确地设置content-type头部信息,以确保请求被正确地识别为JSON格式。可以通过添加头部信息或使用特定的实体类来实现这一目的。

0
0 Comments

问题:

如何在Java中使用HTTP POST发送JSON数据?

原因:

- 需要获取Apache HttpClient库,以便发送请求

- 创建HttpPost请求,并添加header "application/x-www-form-urlencoded"

- 创建一个StringEntity对象,将JSON数据传递给它

- 执行请求

解决方法:

// 获取HttpClient对象
HttpClient httpClient = HttpClientBuilder.create().build();
try {
    // 创建HttpPost请求
    HttpPost request = new HttpPost("http://yoururl");
    
    // 创建StringEntity对象,并传递JSON数据
    StringEntity params = new StringEntity("details={\"name\":\"xyz\",\"age\":\"20\"}");
    
    // 添加header
    request.addHeader("content-type", "application/x-www-form-urlencoded");
    
    // 设置请求参数
    request.setEntity(params);
    
    // 执行请求
    HttpResponse response = httpClient.execute(request);
} catch (Exception ex) {
    // 异常处理
} finally {
    // 关闭连接
    // httpClient.getConnectionManager().shutdown(); 
}

这段代码基本上就是实现HTTP POST发送JSON数据的步骤。通过调试和调整代码,使其正常工作。

在这里,使用StringEntity对象将JSON数据传递给请求。你也可以直接将JSON字符串传递给StringEntity,但这样做可能会导致语法错误。使用JSONObject对象可以确保序列化的正确性,遵循正确的JSON结构。

普通的POST请求和用于JSON的POST请求之间的区别在于处理服务器上的数据的方式。如果只有一些简单的键值对,那么普通的POST参数就足够了。但是,一旦数据变得更加复杂,特别是包含复杂结构(嵌套对象、数组)的数据,就需要考虑使用JSON。使用键值对传递复杂结构将会非常麻烦和难以解析。使用JSON可以更方便地处理复杂结构的数据。

注意:在Android 6.0版本中,不再支持Apache HTTP client。如果你的应用程序使用了这个客户端,并且目标设备是Android 2.3或更高版本,请改用HttpURLConnection类。

参考链接:

- [Apache HttpClient Quick Start](https://hc.apache.org/httpcomponents-client-ga/quickstart.html)

- [Stack Overflow: How to access GitHub GraphQL API using Java](http://stackoverflow.com/questions/42024158?noredirect=1#comment71225261_42024158)

0
0 Comments

问题:如何在Java中使用JSON进行HTTP POST请求?

原因:需要将Java类转换为JSON对象,并通过HTTP POST请求发送。

解决方法:

1. 使用Gson库将Java类转换为JSON对象。

2. 创建一个POJO类来存储要发送的变量。

3. 设置POJO类中的变量,并使用以下代码发送:

String postUrl = "www.site.com";// 替换为你的URL
Gson gson = new Gson();
HttpClient httpClient = HttpClientBuilder.create().build();
HttpPost post = new HttpPost(postUrl);
StringEntity postingString = new StringEntity(gson.toJson(pojo1));// gson.toJson()将POJO转换为JSON
post.setEntity(postingString);
post.setHeader("Content-type", "application/json");
HttpResponse response = httpClient.execute(post);

4. 导入所需的库:

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
import com.google.gson.Gson;

5. 如果使用的是较新版本的HttpClient,需要使用`HttpClientBuilder`来创建`HttpClient`实例。

6. 如果遇到`new pojo1()`的错误,请确保在`gson.toJson()`方法中使用`new`关键字:`StringEntity postingString = new StringEntity(gson.toJson(new pojo1()));`。

7. 如果需要使用`HttpClientBuilder`,可以在Maven仓库中找到`HttpClientBuilder`的依赖:`org.apache.directory.studio:org.apache.httpcomponents:4.0`。

8. 可以使用`ContentType.APPLICATION_JSON`参数替代手动设置请求头的方式,例如使用`StringUtils`构造函数:`new StringEntity(gson.toJson(pojo1), ContentType.APPLICATION_JSON)`。

这样就可以使用Java中的HTTP POST和JSON进行数据交互了。

0