下面是完整攻略:
1. 概述
Java通过post方式提交Json参数操作的流程与普通的表单提交操作类似,只不过需要注意Json参数的构造和提交格式,主要分以下步骤:
1. 组织Json参数
2. 将Json参数转换为字符串
3. 构造Http请求
4. 设置Http请求头信息
5. 发送Http请求
6. 处理返回结果
2. 组织Json参数
首先需要明确Json参数的数据结构,假设要提交一个如下数据结构的Json参数:
{
"name": "张三",
"age": 28,
"gender": 1,
"hobby": ["reading", "swimming"]
}
则可以使用Java中的Map对象来组织这个Json参数,示例如下:
Map<String, Object> params = new HashMap<>();
params.put("name", "张三");
params.put("age", 28);
params.put("gender", 1);
List<String> hobbyList = new ArrayList<>();
hobbyList.add("reading");
hobbyList.add("swimming");
params.put("hobby", hobbyList);
3. 将Json参数转换为字符串
将Json参数Map对象转换为字符串使用Json库,这里使用阿里巴巴的fastjson库,示例如下:
import com.alibaba.fastjson.JSON;
String jsonString = JSON.toJSONString(params);
4. 构造Http请求
使用Java中的HttpURLConnection对象构造Http请求,示例如下:
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.HttpURLConnection;
// API接口地址
String url = "http://example.com/api/user/create";
// 构造Http请求
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
con.setDoOutput(true);
5. 设置Http请求头信息
设置Content-Length和User-Agent请求头信息,示例如下:
con.setRequestProperty("Content-Length", String.valueOf(jsonString.length()));
con.setRequestProperty("User-Agent", "Mozilla/5.0");
6. 发送Http请求
使用HttpURLConnection对象发送Http请求,并将Json参数字符串写入请求流中,示例如下:
OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream());
wr.write(jsonString);
wr.flush();
wr.close();
7. 处理返回结果
获取API接口返回的结果,并进行处理,示例如下:
import java.io.BufferedReader;
import java.io.InputStreamReader;
// 获取API接口返回的结果
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// 处理返回结果
System.out.println("API接口返回的结果:" + response.toString());
以上就是通过post方式提交Json参数的完整攻略,下面提供两个示例说明:
示例1:使用SpringMVC框架发送Json参数
下面给出在SpringMVC框架中发送Json参数的示例代码:
@PostMapping("/api/user/create")
@ResponseBody
public Map<String, Object> createUser(@RequestBody Map<String, Object> params) {
// 处理参数并返回响应数据
// ......
return result;
}
通过在SpringMVC的控制器中使用@RequestBody
注解可以直接将Json参数映射到Map对象中,非常方便。
示例2:使用HttpClient发送Json参数
下面给出使用Apache的HttpClient库发送Json参数的示例代码:
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
Map<String, Object> params = new HashMap<>();
params.put("name", "张三");
params.put("age", 28);
params.put("gender", 1);
List<String> hobbyList = new ArrayList<>();
hobbyList.add("reading");
hobbyList.add("swimming");
params.put("hobby", hobbyList);
// 构造Json参数字符串
String jsonString = JSON.toJSONString(params);
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("http://example.com/api/user/create");
httpPost.setHeader("Content-type", "application/json");
StringEntity entity = new StringEntity(jsonString);
entity.setContentEncoding("UTF-8");
httpPost.setEntity(entity);
CloseableHttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
String responseContent = EntityUtils.toString(httpEntity, "UTF-8");
System.out.println("API接口返回的结果:" + responseContent);
通过使用Apache的HttpClient库可以更方便的发送Http请求。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 实现通过 post 方式提交json参数操作 - Python技术站