java以json格式向后台服务器接口发送请求的实例

下面我来详细讲解「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技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • t01_idea消除的白框

    消除idea顶部窗口上的白色标题栏 点击Hlep,找到Edit Custom VM Options…点击 添加下面一段话(如果有责显示为false责改为true): -Dide.win.frame.decoration=true 然后重启即可,如下图所示,顶部白框已经没有出现了 原文链接:https://www.cnblogs.com/2580p/p/1…

    Java 2023年5月2日
    00
  • Sprint Boot @Controller使用方法详解

    @Controller是Spring Boot中的一个注解,它用于标记一个类为控制器类。在使用Spring Boot开发Web应用程序时,@Controller是非常有用的。本文将详细介绍@Controller的作用和使用方法,并提供两个示例说明。 @Controller的作用 @Controller的作用是标记一个类为控制器类。控制器类是指处理HTTP请求…

    Java 2023年5月5日
    00
  • 基于Java语言的递归运算例题详解

    针对“基于Java语言的递归运算例题详解”,我的建议如下: 一、什么是递归 在计算机科学中,递归是一种经常被用于解决问题的方法。简单来说,递归就是通过一个函数的不断调用自身来解决复杂问题的方法。 二、递归的基本原则 递归运算的基本原则有三个: 找到和确定基线条件:递归最基本的原则是将问题分解为基本的情况,然后解决这些情况。这个基本情况就是我们所说的基线条件。…

    Java 2023年5月26日
    00
  • Java中异常打印输出的常见方法总结

    当Java程序运行出现异常时,我们需要找到出现问题的原因,对于找到问题的原因和修复问题,我们通常需要查看程序的异常信息。本篇文章将会对Java中异常打印输出的常见方法进行总结,并提供一些示例用于说明。 使用try-catch语句块打印异常信息 在Java程序中使用try-catch语句块实现异常处理,我们可以利用catch代码块中的异常对象获取到异常的原因,…

    Java 2023年5月26日
    00
  • 吃透Redis面试八股文

    Redis连环40问,绝对够全! Redis是什么? Redis(Remote Dictionary Server)是一个使用 C 语言编写的,高性能非关系型的键值对数据库。与传统数据库不同的是,Redis 的数据是存在内存中的,所以读写速度非常快,被广泛应用于缓存方向。Redis可以将数据写入磁盘中,保证了数据的安全不丢失,而且Redis的操作是原子性的。…

    2023年4月24日
    00
  • java实现简易飞机大战

    Java实现简易飞机大战攻略 项目背景 飞机大战是一款经典的射击类游戏,玩家所扮演的角色是一架飞机,在空中飞行并与敌人战斗,通过不断的击败敌人来提升分数。本文将详细讲解如何使用Java实现一个简易版的飞机大战游戏。 实现步骤 创建游戏窗口 使用Java Swing组件,通过继承JFrame类来创建一个游戏窗口。在窗口中添加画布,用于绘制游戏背景和各种游戏元素…

    Java 2023年5月23日
    00
  • java开发SSM框架具有rest风格的SpringMVC

    Java开发SSM框架具有REST风格的SpringMVC 在 Java 开发中,SSM 框架是一种常用的 Web 开发框架,它由 Spring、SpringMVC 和 MyBatis 三个框架组成。其中,SpringMVC 是用于处理 Web 请求的框架,支持 REST 风格的 Web 服务。本文将详细讲解如何在 SSM 框架中使用 SpringMVC 实…

    Java 2023年5月18日
    00
  • 简单了解Spring Web相关模块运行原理

    简单了解Spring Web相关模块运行原理 Spring Web是一个基于Spring框架的Web开发框架,它提供了构建Web应用程序和RESTful Web服务所需的所有功能。在了解Spring Web相关模块的运行原理之前,需要首先了解Spring MVC的基本原理。 Spring MVC基本原理 Spring MVC是一种基于模型-视图-控制器(MV…

    Java 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部