下面我来详细讲解「Java以JSON格式向后台服务器接口发送请求的实例」:
1.什么是JSON
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。在前后端通信的接口中,JSON格式被广泛应用。它具有易读性好、可解析性强等特点,通常使用键值对表示数据。键值对之间使用冒号(:)分割,不同的键值对之间使用逗号(,)分割,键值对可以包含数组和嵌套对象。
2.使用Java发送JSON
在Java中,通常可以使用一些类库来处理JSON格式的数据。其中,常用的类库是Google的gson,Jackson等等。
以gson为例,下面示范如何使用Java代码向后台服务发送请求并解析响应数据。
首先需要引入gson类库的相关jar包,再进行下面的操作:
// 导入需要使用的类库
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class HttpUtil {
/**
* 发送POST请求带JSON格式数据,并解析响应
* @param url 请求URL
* @param paramMap 请求参数map
* @return 返回响应数据
*/
public static String postWithJson(String url, Map<String, Object> paramMap) throws IOException {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
// 设置请求头的ContentType为application/json
httpPost.addHeader("Content-Type", "application/json");
// 把map转成json字符串提交
Gson gson = new Gson();
String requestBody = gson.toJson(paramMap);
httpPost.setEntity(new UrlEncodedFormEntity(requestBody.getBytes(StandardCharsets.UTF_8)));
// 执行请求并返回响应结果
CloseableHttpResponse response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
return EntityUtils.toString(entity, StandardCharsets.UTF_8);
}
}
以上代码基本实现了向后台发送请求,并解析响应数据中JSON格式数据的功能。下面给出一个示例:
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("user_id", 123456);
paramMap.put("user_name", "张三");
String responseStr = HttpUtil.postWithJson("http://localhost:8080/api/v1/user_info", paramMap);
Type type = new TypeToken<HashMap<String, Object>>() {}.getType();
HashMap<String, Object> responseMap = new Gson().fromJson(responseStr, type);
// 读取返回的数据
if (responseMap.get("code").equals(0)) {
HashMap<String, Object> dataMap = (HashMap<String, Object>) responseMap.get("data");
int userId = (int) dataMap.get("user_id");
String username = (String) dataMap.get("user_name");
// TODO: 处理返回的数据
} else {
String errorMessage = (String) responseMap.get("message");
// TODO: 处理错误信息
}
以上示例中,我们使用HashMap定义了请求参数,并调用HttpUtil的静态方法postWithJson()实现请求并获取响应数据。最后,我们使用gson类库解析返回的json格式数据,根据其中的code字段决定是读取data字段中的数据或是处理出现的错误信息。
当然,也可以把JSON数据封装成对应的javabean对象,读取和设置属性值时更加方便,也更符合面向对象的设计原则,下面给出这种方式的示例:
public class UserInfo {
private int userId;
private String userName;
public int getUserId() { return userId; }
public void setUserId(int userId) { this.userId = userId; }
public String getUserName() { return userName; }
public void setUserName(String userName) { this.userName = userName; }
}
// 修改HttpUtil类的代码为下面的形式
public final class HttpUtil {
/**
* 发送POST请求带JSON格式数据,并解析响应
* @param url 请求URL
* @param requestBody 请求JSON数据字符串
* @param responseType 返回响应数据类型
* @return 返回响应数据对象
*/
public static <T> T postWithJson(String url, String requestBody, Class<T> responseType) throws IOException {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
// 设置请求头的ContentType为application/json
httpPost.addHeader("Content-Type", "application/json");
// 提交JSON请求数据
httpPost.setEntity(new UrlEncodedFormEntity(requestBody.getBytes(StandardCharsets.UTF_8)));
// 执行请求并返回响应结果
CloseableHttpResponse response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
String responseStr = EntityUtils.toString(entity, StandardCharsets.UTF_8);
return new Gson().fromJson(responseStr, responseType);
}
}
// 使用示例
String requestBody = "{ \"user_id\": 123456, \"user_name\": \"张三\" }";
UserInfo userInfo = HttpUtil.postWithJson("http://localhost:8080/api/v1/user_info", requestBody, UserInfo.class);
if (userInfo != null && userInfo.getUserId() != null && userInfo.getUserName() != null) {
int userId = userInfo.getUserId();
String userName = userInfo.getUserName();
// TODO: 处理返回的数据
} else {
// TODO: 处理错误信息
}
3.总结
以上即「Java以JSON格式向后台服务器接口发送请求的实例」的完整攻略,通过使用gson类库实现了请求并解析响应JSON格式的数据。值得注意的是,如果后台对请求格式有相关的限制,需要按照后台人员提供的具体规则进行设置。此外,Java中同样也可实现发送XML格式或其他格式消息的请求处理。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java以json格式向后台服务器接口发送请求的实例 - Python技术站