You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SpringBoot中通过函数实现指定JSON体的POST请求(无需Postman)

不用Postman实现指定POST请求的几种函数方案

下面针对你的SpringBoot项目,提供几种无需Postman、通过代码函数发送目标POST请求的实现方式:

1. Spring自带RestTemplate(同步场景首选)

RestTemplate是Spring传统的同步HTTP客户端,适合简单的同步请求场景,SpringBoot项目默认已包含相关依赖。

import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

public class OrderRequestSender {
    public static void sendOrderRequest() {
        RestTemplate restTemplate = new RestTemplate();
        String targetUrl = "http://localhost:8080/api/v1/orders";

        // 设置请求头,指定JSON格式
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        // 用实体类封装请求体(比直接用Map更规范)
        OrderRequest requestBody = new OrderRequest();
        requestBody.setFuelType("Petrol 95");
        requestBody.setQty(10000);

        // 封装请求实体
        HttpEntity<OrderRequest> requestEntity = new HttpEntity<>(requestBody, headers);

        // 发送POST请求并获取响应
        ResponseEntity<String> response = restTemplate.postForEntity(targetUrl, requestEntity, String.class);

        // 打印响应信息
        System.out.println("响应状态码: " + response.getStatusCode());
        System.out.println("响应内容: " + response.getBody());
    }

    // 自定义请求体对应的实体类
    static class OrderRequest {
        private String fuelType;
        private int qty;

        // Getter和Setter方法
        public String getFuelType() { return fuelType; }
        public void setFuelType(String fuelType) { this.fuelType = fuelType; }
        public int getQty() { return qty; }
        public void setQty(int qty) { this.qty = qty; }
    }
}

2. Spring WebClient(非阻塞/响应式场景首选)

WebClient是Spring 5+推出的非阻塞HTTP客户端,适合响应式编程架构,同样依赖Spring Web包。

import org.springframework.http.MediaType;
import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;

public class OrderWebClientSender {
    public static void sendOrderRequest() {
        WebClient webClient = WebClient.create();
        String targetUrl = "http://localhost:8080/api/v1/orders";

        OrderRequest requestBody = new OrderRequest();
        requestBody.setFuelType("Petrol 95");
        requestBody.setQty(10000);

        // 构建并发送POST请求
        Mono<String> responseMono = webClient.post()
                .uri(targetUrl)
                .contentType(MediaType.APPLICATION_JSON)
                .body(BodyInserters.fromValue(requestBody))
                .retrieve()
                .bodyToMono(String.class);

        // 阻塞获取结果(非阻塞场景可改用subscribe异步处理)
        String responseContent = responseMono.block();
        System.out.println("响应内容: " + responseContent);
    }

    // 同上面的OrderRequest实体类
    static class OrderRequest {
        private String fuelType;
        private int qty;

        public String getFuelType() { return fuelType; }
        public void setFuelType(String fuelType) { this.fuelType = fuelType; }
        public int getQty() { return qty; }
        public void setQty(int qty) { this.qty = qty; }
    }
}

3. OkHttp第三方库(灵活度高)

如果需要更灵活的HTTP配置,可以使用OkHttp,先在项目中添加依赖:

Maven依赖:

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.11.0</version>
</dependency>

代码实现:

import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import java.io.IOException;

public class OrderOkHttpSender {
    public static void sendOrderRequest() throws IOException {
        OkHttpClient client = new OkHttpClient();
        String targetUrl = "http://localhost:8080/api/v1/orders";
        MediaType JSON_TYPE = MediaType.get("application/json; charset=utf-8");

        // 直接构造JSON字符串作为请求体
        String jsonBody = "{\"fuelType\": \"Petrol 95\", \"qty\": 10000}";
        RequestBody body = RequestBody.create(jsonBody, JSON_TYPE);

        Request request = new Request.Builder()
                .url(targetUrl)
                .post(body)
                .build();

        // 发送请求并处理响应
        try (Response response = client.newCall(request).execute()) {
            System.out.println("响应状态码: " + response.code());
            System.out.println("响应内容: " + response.body().string());
        }
    }
}

4. Java原生HttpURLConnection(无额外依赖)

如果不想引入任何第三方库,可用Java原生的HttpURLConnection实现:

import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

public class OrderHttpURLSender {
    public static void sendOrderRequest() throws Exception {
        URL url = new URL("http://localhost:8080/api/v1/orders");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);

        // 写入JSON请求体
        String jsonBody = "{\"fuelType\": \"Petrol 95\", \"qty\": 10000}";
        try (OutputStream os = conn.getOutputStream()) {
            byte[] input = jsonBody.getBytes("utf-8");
            os.write(input, 0, input.length);
        }

        // 读取响应内容
        Scanner scanner = new Scanner(conn.getInputStream());
        StringBuilder response = new StringBuilder();
        while (scanner.hasNext()) {
            response.append(scanner.nextLine());
        }
        scanner.close();

        System.out.println("响应状态码: " + conn.getResponseCode());
        System.out.println("响应内容: " + response.toString());
        conn.disconnect();
    }
}

内容的提问来源于stack exchange,提问作者Imila Maheshan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 17:42:14