用java请求一个post接口,并把返回的结果拿下来

最简单、直接、能直接运行的 Java POST 请求代码,用最常用的 HttpClient(Java 11+ 内置,无需引包),直接复制就能用。

Java 发送 POST 请求(JSON 格式,最常用)

下面是完整工具类,包含:

  • 发送 POST 请求
  • 传 JSON 参数
  • 获取返回结果
  • 异常处理

java

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 PostRequestUtil {

    public static void main(String[] args) {
        // 1. 你要请求的接口地址
        String url = "https://httpbin.org/post"; // 测试接口,可替换成你自己的

        // 2. 接口需要的参数(JSON 格式)
        String jsonParams = "{\"username\":\"test\",\"password\":\"123456\"}";

        // 3. 发送请求并获取结果
        String result = sendPostJson(url, jsonParams);

        // 4. 打印返回结果
        System.out.println("接口返回结果:");
        System.out.println(result);
    }

    /**
     * 发送 POST 请求(参数为 JSON 格式)
     * @param url  接口地址
     * @param jsonParams JSON 参数
     * @return 接口返回的字符串
     */
    public static String sendPostJson(String url, String jsonParams) {
        // 创建 HTTP 客户端
        HttpClient client = HttpClient.newHttpClient();

        // 构建请求
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(url))
                // POST 请求 + JSON 参数
                .POST(HttpRequest.BodyPublishers.ofString(jsonParams, StandardCharsets.UTF_8))
                // 设置请求头(必须!告诉接口传的是 JSON)
                .header("Content-Type", "application/json; charset=UTF-8")
                .build();

        try {
            // 发送请求并获取响应
            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8));

            // 返回响应体内容
            return response.body();
        } catch (Exception e) {
            e.printStackTrace();
            return "请求失败:" + e.getMessage();
        }
    }
}

运行结果

你直接运行 main 方法,就能看到:

plaintext

接口返回结果:
{
  "args": {},
  "data": "{\"username\":\"test\",\"password\":\"123456\"}",
  "files": {},
  "form": {},
  "headers": {
    "Content-Length": "39",
    "Content-Type": "application/json; charset=UTF-8",
    "Host": "httpbin.org",
    "User-Agent": "Java-http-client/17.0.10"
  },
  "json": {
    "password": "123456",
    "username": "test"
  },
  "origin": "xxx.xxx.xxx.xxx",
  "url": "https://httpbin.org/post"
}

你只需要改 2 个地方就能用在你的项目里

  1. 接口地址

    java

    运行

    String url = "你的接口地址";
    
  2. 请求参数

    java

    运行

    String jsonParams = "{你的JSON参数}";
    

如果你需要表单格式(form-data)

我也给你准备好:

java

运行

public static String sendPostForm(String url, Map<String, String> params) {
    HttpClient client = HttpClient.newHttpClient();

    // 拼接表单参数
    String formData = params.entrySet().stream()
            .map(e -> e.getKey() + "=" + URLEncoder.encode(e.getValue(), StandardCharsets.UTF_8))
            .collect(Collectors.joining("&"));

    HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(url))
            .header("Content-Type", "application/x-www-form-urlencoded")
            .POST(HttpRequest.BodyPublishers.ofString(formData))
            .build();

    try {
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        return response.body();
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

总结

  1. 这是 Java 11+ 官方原生 HttpClient,不用引任何包
  2. 代码直接运行、直接复制
  3. 支持 JSON / 表单 两种最常用 POST 格式
  4. 返回结果直接拿到 String,你想解析、存库都可以

需要我帮你对接你真实的接口吗?把接口地址 + 参数格式发我,我直接帮你改成可运行代码。

如何在 Java 中处理接口返回的 JSON 数据?

在 Java 里处理接口返回的 JSON,最常用的是 JacksonGson 这两个库。下面我用最简单、最实用的方式教你:拿到接口返回的 JSON 字符串 → 转成 Java 对象 / Map → 直接取值。


一、先引入依赖(二选一)

1. 使用 Jackson(Spring 默认,最常用)

Maven:

xml

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

2. 使用 Gson(谷歌出品,轻量)

Maven:

xml

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>

二、假设接口返回 JSON 如下

json

{
  "code": 200,
  "msg": "请求成功",
  "data": {
    "id": 1001,
    "username": "zhangsan",
    "age": 25
  }
}

三、方式 1:JSON → Java 对象(最规范)

1. 先建实体类

java

运行

import lombok.Data;

// 整体返回结构
@Data
public class ApiResult {
    private Integer code;
    private String msg;
    private User data;
}

// data 里的用户对象
@Data
public class User {
    private Integer id;
    private String username;
    private Integer age;
}

不用 Lombok 就手写 getter/setter。

2. Jackson 解析

java

运行

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonTest {
    public static void main(String[] args) throws Exception {
        // 接口返回的 JSON 字符串
        String json = "{\"code\":200,\"msg\":\"请求成功\",\"data\":{\"id\":1001,\"username\":\"zhangsan\",\"age\":25}}";

        ObjectMapper mapper = new ObjectMapper();
        ApiResult result = mapper.readValue(json, ApiResult.class);

        // 直接取值
        System.out.println(result.getCode());    // 200
        System.out.println(result.getMsg());     // 请求成功
        System.out.println(result.getData().getUsername()); // zhangsan
    }
}

3. Gson 解析

java

运行

import com.google.gson.Gson;

public class JsonTest {
    public static void main(String[] args) {
        String json = "{\"code\":200,\"msg\":\"请求成功\",\"data\":{\"id\":1001,\"username\":\"zhangsan\",\"age\":25}}";

        Gson gson = new Gson();
        ApiResult result = gson.fromJson(json, ApiResult.class);

        System.out.println(result.getCode());
        System.out.println(result.getData().getUsername());
    }
}

四、方式 2:JSON → Map(快速取值,不用建类)

适合不想写实体类、临时解析的场景。

Jackson 转 Map

java

运行

ObjectMapper mapper = new ObjectMapper();
Map<String, Object> map = mapper.readValue(json, Map.class);

int code = (int) map.get("code");
String msg = (String) map.get("msg");

Map<String, Object> data = (Map) map.get("data");
String username = (String) data.get("username");

Gson 转 Map

java

运行

Gson gson = new Gson();
Map<String, Object> map = gson.fromJson(json, Map.class);

double code = (double) map.get("code"); // Gson 数字默认 double
String username = (String) ((Map) map.get("data")).get("username");

五、结合你刚才的 POST 请求完整示例

把 POST 请求 + JSON 解析放一起:

java

运行

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import com.fasterxml.jackson.databind.ObjectMapper;

public class PostWithJsonParse {
    public static void main(String[] args) throws Exception {
        String url = "https://httpbin.org/post";
        String jsonParams = "{\"username\":\"test\",\"password\":\"123456\"}";

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(url))
                .POST(HttpRequest.BodyPublishers.ofString(jsonParams))
                .header("Content-Type", "application/json")
                .build();

        // 获取返回 JSON
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        String json = response.body();

        // 解析 JSON
        ObjectMapper mapper = new ObjectMapper();
        Map<String, Object> resultMap = mapper.readValue(json, Map.class);

        System.out.println("url: " + resultMap.get("url"));
        System.out.println("data: " + resultMap.get("data"));
    }
}

六、常见小问题

  • 字段名不一致:用 @JsonProperty("user_name")
  • JSON 数组:转 List<实体类>
    • Jackson:List<User> list = mapper.readValue(json, new TypeReference<>(){});
  • null 值:解析不会报错,会自动为 null
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lifewange

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值