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

yizhihongxing

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

相关文章

  • kotlin实战教程之lambda编程

    Kotlin实战教程之Lambda编程攻略 本教程将带领读者深入学习Kotlin中Lambda编程的知识点,并且提供实用的示例代码帮助读者快速掌握Lambda编程技巧。下面将从以下几个方面进行讲解: Lambda表达式的基本语法 Kotlin中Lambda表达式的使用 常用的Lambda函数 1. Lambda表达式的基本语法 Lambda表达式是一种匿名函…

    Java 2023年5月26日
    00
  • springmvc字符编码过滤器CharacterEncodingFilter的使用

    当我们使用Spring MVC开发Web应用时,可能会发现在处理请求参数时存在中文乱码的问题,这时候我们需要使用字符编码过滤器(CharacterEncodingFilter)来解决这个问题。 以下是使用Spring MVC中字符编码过滤器的步骤: 步骤一:添加依赖项 首先,在项目的pom.xml文件中添加以下依赖项: <dependency> …

    Java 2023年5月20日
    00
  • Spring Security 在 Spring Boot 中的使用详解【集中式】

    下面是对于 “Spring Security 在 Spring Boot 中的使用详解【集中式】” 的完整攻略。 一、什么是 Spring Security Spring Security 是 Spring 生态圈中基于安全框架的一款开源工具。它能够帮助我们实现应用程序的安全控制,保证我们的应用程序在面临安全威胁时能够做出正确的响应。 二、Spring Se…

    Java 2023年5月20日
    00
  • 常见的Java性能调优工具有哪些?

    Java性能调优是提高应用程序性能和并发运行效率的必要手段,为了提高Java应用程序的性能,需要使用一些专业的性能调优工具。 常见的Java性能调优工具有以下几种: JProfiler:JProfiler是一种动态的Java代码性能分析工具,主要特点是高效和低侵入性,可以帮助开发人员快速定位Java应用程序的性能瓶颈,并提出优化建议。使用JProfiler进…

    Java 2023年5月11日
    00
  • jsp获取action传来的session和session清空以及判断

    获取Action传来的session和清空session是JSP页面常用的操作之一。本文将介绍如何在JSP页面中获取Action传递过来的session和如何清空session,同时提供代码示例进行说明。 获取Action传来的session 获取Action传递过来的session需要使用jsp:useBean标签和sessionScope对象。jsp:u…

    Java 2023年6月15日
    00
  • Java多线程之Callable接口的实现

    标题:Java多线程之Callable接口的实现 正文: Callable接口的概述 在Java中,实现多线程有两种方式:继承Thread类和实现Runnable接口,但这两种方式都有一个缺点,就是无法返回结果。而Callable接口则可以解决这个问题,它可以在任务执行完成后返回一个结果。 Callable接口是一个带泛型参数的接口,它只有一个方法call(…

    Java 2023年5月19日
    00
  • Java中间消息件ActiveMQ使用实例

    下面我来详细地讲解一下“Java中间消息件ActiveMQ使用实例”的完整攻略。 什么是ActiveMQ ActiveMQ是Apache下的一个开源项目,它实现了JMS规范,提供了消息收发的功能。ActiveMQ支持多种协议,包括TCP, SSL, NIO, UDP等等,因此可以很容易地集成到各种不同的应用中。 ActiveMQ的安装和配置 ActiveMQ…

    Java 2023年5月20日
    00
  • JavaFX程序初次运行创建数据库并执行建表SQL详解

    下面是JavaFX程序初次运行创建数据库并执行建表SQL的完整攻略。 前置知识 在进行本攻略前,需要以下知识储备: Java语言基础 JDBC编程 MySQL数据库 步骤 步骤1:导入MySQL驱动 JavaFX程序中需要使用MySQL数据库,因此需要导入MySQL驱动。可在Maven配置文件中添加以下依赖: <dependency> <g…

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