0

0

使用Java客户端向Spring Boot服务器发送POST请求

霞舞

霞舞

发布时间:2025-07-28 21:06:01

|

511人浏览过

|

来源于php中文网

原创

使用java客户端向spring boot服务器发送post请求

本文档旨在指导开发者如何使用Java客户端向Spring Boot服务器发送POST请求。文章将首先介绍问题背景,然后提供两种解决方案:一种是使用HttpURLConnection,另一种是使用Java 11引入的HttpClient。我们将详细讲解每种方法的实现步骤,并提供完整的代码示例,帮助开发者快速掌握POST请求的发送方法,并解决Spring Boot服务端无法接收POST请求的问题。

使用 HttpURLConnection 发送 POST 请求

HttpURLConnection 是 Java 标准库中提供的用于进行 HTTP 通信的类。虽然它功能强大,但使用起来相对繁琐。以下是使用 HttpURLConnection 发送 POST 请求的步骤和代码示例:

  1. 创建 URL 对象: 使用 Spring Boot 服务器的 URL 创建 URL 对象。

    String url = "http://127.0.0.1:8090/online";
    URL mUrl = new URL(url);
  2. 打开连接: 使用 URL 对象的 openConnection() 方法打开一个 HttpURLConnection 连接。

    立即学习Java免费学习笔记(深入)”;

    HttpURLConnection urlConn = (HttpURLConnection) mUrl.openConnection();
  3. 设置请求方法: 设置请求方法为 POST。

    urlConn.setRequestMethod("POST");
  4. 设置请求头: 设置 Content-Type 请求头,指定请求体的媒体类型。

    urlConn.setRequestProperty("Content-Type", "text/plain; charset=UTF-8");

    注意: Content-Type 非常重要,Spring Boot 才能正确解析请求体。常用的类型包括 application/json (JSON 数据), application/x-www-form-urlencoded (表单数据), 和 text/plain (纯文本数据)。 根据你的 Spring Boot 服务端期望接收的类型来设置。

  5. 允许输出: 设置 DoOutput 为 true,允许向服务器发送数据。

    urlConn.setDoOutput(true);
  6. 写入请求体: 获取输出流,并将请求体数据写入。

    String query = "Body";
    try (OutputStream os = urlConn.getOutputStream()) {
        byte[] input = query.getBytes(StandardCharsets.UTF_8);
        os.write(input, 0, input.length);
    }
  7. 获取响应: 获取响应码,并读取响应内容。

    int responseCode = urlConn.getResponseCode();
    System.out.println("Response Code : " + responseCode);
    
    try (BufferedReader br = new BufferedReader(new InputStreamReader(urlConn.getInputStream(), StandardCharsets.UTF_8))) {
        StringBuilder response = new StringBuilder();
        String responseLine = null;
        while ((responseLine = br.readLine()) != null) {
            response.append(responseLine.trim());
        }
        System.out.println(response.toString());
    }
  8. 断开连接: 关闭连接。

    urlConn.disconnect();

完整示例代码:

HostDirector
HostDirector

含Whois查询,可以检查全世界任何后缀名的域名,可以通过订购域名,主机和其他服务,并通过Worldpay, PayPal, Invoice 或你自己的安全服务器支付费用,客户可以察看他们的产品,购买更多的服务,更新产品,请求技术支持,察看在线知识库或最新新闻,可以管理客户的详细资料,并通过email向你的客户发送产品到期或即将到期的清单

下载
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;

public class HttpURLConnectionExample {

    public static void main(String[] args) throws IOException {
        String url = "http://127.0.0.1:8090/online";
        URL mUrl = new URL(url);
        HttpURLConnection urlConn = (HttpURLConnection) mUrl.openConnection();

        urlConn.setRequestMethod("POST");
        urlConn.setRequestProperty("Content-Type", "text/plain; charset=UTF-8");
        urlConn.setDoOutput(true);

        String query = "Body";
        try (OutputStream os = urlConn.getOutputStream()) {
            byte[] input = query.getBytes(StandardCharsets.UTF_8);
            os.write(input, 0, input.length);
        }

        int responseCode = urlConn.getResponseCode();
        System.out.println("Response Code : " + responseCode);

        try (BufferedReader br = new BufferedReader(new InputStreamReader(urlConn.getInputStream(), StandardCharsets.UTF_8))) {
            StringBuilder response = new StringBuilder();
            String responseLine = null;
            while ((responseLine = br.readLine()) != null) {
                response.append(responseLine.trim());
            }
            System.out.println(response.toString());
        }

        urlConn.disconnect();
    }
}

使用 HttpClient (Java 11+) 发送 POST 请求

Java 11 引入了新的 HttpClient API,它提供了更简洁、更现代化的方式来发送 HTTP 请求。以下是使用 HttpClient 发送 POST 请求的步骤和代码示例:

  1. 创建 HttpClient 对象: 使用 HttpClient.newHttpClient() 创建一个 HttpClient 实例。

    HttpClient client = HttpClient.newHttpClient();
  2. 创建 HttpRequest 对象: 使用 HttpRequest.newBuilder() 构建一个 HttpRequest 对象。你需要指定 URL, 请求方法 (POST), 和请求体。

    String url = "http://127.0.0.1:8090/online";
    String query = "Body";
    HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(url))
            .header("Content-Type", "text/plain; charset=UTF-8") // 设置 Content-Type
            .POST(HttpRequest.BodyPublishers.ofString(query, StandardCharsets.UTF_8))
            .build();

    注意: 同样,Content-Type 的设置非常重要,需要与 Spring Boot 服务端期望的类型一致。 HttpRequest.BodyPublishers.ofString() 方法用于创建请求体。

  3. 发送请求: 使用 HttpClient 的 send() 方法发送请求,并获取响应。

    HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());

    HttpResponse.BodyHandlers.ofString() 指定响应体的内容类型为 String。

  4. 处理响应: 获取响应状态码和响应体。

    System.out.println("Response Status Code: " + response.statusCode());
    System.out.println("Response Body: " + response.body());

完整示例代码:

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;

public class HttpClientExample {

    public static void main(String[] args) throws IOException, InterruptedException {
        HttpClient client = HttpClient.newHttpClient();
        String url = "http://127.0.0.1:8090/online";
        String query = "Body";

        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(url))
                .header("Content-Type", "text/plain; charset=UTF-8")
                .POST(HttpRequest.BodyPublishers.ofString(query, StandardCharsets.UTF_8))
                .build();

        HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());

        System.out.println("Response Status Code: " + response.statusCode());
        System.out.println("Response Body: " + response.body());
    }
}

Spring Boot 服务端代码示例

确保你的 Spring Boot 服务端能够正确接收 POST 请求。以下是一个简单的示例:

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MessageService {

    @PostMapping(path = "/online", consumes = "text/plain") // 指定 consumes
    public ResponseEntity getResponse(@RequestBody String requestBody){
        System.out.println("Post Recieved: " + requestBody);
        return new ResponseEntity<>("Received: " + requestBody, HttpStatus.OK);
    }
}

关键点:

  • @PostMapping 注解: 使用 @PostMapping 注解来处理 POST 请求。
  • path 属性: 设置 path 属性来指定请求路径。
  • consumes 属性: 设置 consumes 属性来指定服务端能够处理的 Content-Type。 确保它与客户端发送的 Content-Type 一致。 在这个例子中,我们指定 consumes = "text/plain",表示服务端期望接收纯文本数据。
  • @RequestBody 注解: 使用 @RequestBody 注解来接收请求体数据。

总结与注意事项

  • Content-Type 匹配: 确保客户端发送的 Content-Type 与 Spring Boot 服务端 consumes 属性指定的类型匹配。这是最常见的问题原因。
  • 字符编码: 在发送和接收数据时,始终指定字符编码 (例如 UTF-8),以避免乱码问题。
  • 依赖: 如果使用 HttpClient,请确保你的项目使用了 Java 11 或更高版本。
  • 异常处理: 在实际应用中,需要添加适当的异常处理代码,以处理网络连接、IO 错误等问题。
  • 调试: 使用网络抓包工具 (例如 Wireshark) 可以帮助你分析 HTTP 请求和响应,从而更好地调试问题。

通过本文档的学习,你应该能够使用 Java 客户端成功向 Spring Boot 服务器发送 POST 请求。 选择 HttpURLConnection 或 HttpClient 取决于你的项目需求和 Java 版本。 HttpClient 提供了更简洁的 API,推荐在 Java 11+ 环境中使用。 记住,确保 Content-Type 匹配是解决问题的关键。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

840

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

742

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

737

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

397

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

399

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

446

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

430

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

16926

2023.08.03

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

19

2026.01.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

相关下载

更多

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 3.8万人学习

Pandas 教程
Pandas 教程

共15课时 | 0.9万人学习

ASP 教程
ASP 教程

共34课时 | 3.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号