如何在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
相关产品推荐
相关产品推荐

