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

如何在Java Swing中将REST获取的JSON数据填充到JTable?

解决REST JSON数据填充JTable的方案

嘿,我来帮你搞定把REST接口返回的JSON数据填充到JTable的问题!咱们一步步来操作:

1. 准备JSON解析工具(以Jackson为例)

首先你需要一个JSON解析库,Jackson是Java里常用的选择。如果用Maven的话,在pom.xml里添加依赖:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version> <!-- 用最新稳定版即可 -->
</dependency>

如果是NetBeans手动导入,就下载对应的jar包(jackson-core、jackson-databind、jackson-annotations)添加到项目库中。

2. 创建对应JSON结构的POJO类

假设你的REST接口返回的JSON是一个对象数组,结构类似这样:

[
    {"id":1, "name":"张三", "address":"北京"},
    {"id":2, "name":"李四", "address":"上海"}
]

那咱们创建一个Bdetails.java实体类来映射这个结构:

public class Bdetails {
    private int id;
    private String name;
    private String address;

    // 必须保留无参构造函数,Jackson需要它来实例化对象
    public Bdetails() {}

    // Getter和Setter方法
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public String getAddress() { return address; }
    public void setAddress(String address) { this.address = address; }
}

如果JSON字段名和POJO字段名不一致,可以用@JsonProperty("json_key_name")注解指定映射关系。

3. 自定义TableModel

JTable需要依赖TableModel来提供数据,咱们继承AbstractTableModel写一个自定义模型:

import javax.swing.table.AbstractTableModel;
import java.util.List;

public class BdetailsTableModel extends AbstractTableModel {
    private final List<Bdetails> bdetailsList;
    private final String[] columnNames = {"ID", "姓名", "地址"}; // 表格列名

    public BdetailsTableModel(List<Bdetails> bdetailsList) {
        this.bdetailsList = bdetailsList;
    }

    @Override
    public int getRowCount() {
        return bdetailsList.size();
    }

    @Override
    public int getColumnCount() {
        return columnNames.length;
    }

    @Override
    public String getColumnName(int column) {
        return columnNames[column];
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Bdetails bdetails = bdetailsList.get(rowIndex);
        switch (columnIndex) {
            case 0: return bdetails.getId();
            case 1: return bdetails.getName();
            case 2: return bdetails.getAddress();
            default: return null;
        }
    }
}

这个模型会把List<Bdetails>的数据映射到表格的行和列中。

4. 修改按钮点击事件的代码

现在把你原来获取JSON的代码扩展,加上解析和填充表格的逻辑:

jButton.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        try {
            URL url = new URL("http://localhost:8080/webservice/rest/bdetails/get");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setRequestProperty("Accept", "application/json");

            // 检查请求是否成功
            if (conn.getResponseCode() != 200) {
                throw new RuntimeException("请求失败: 状态码 " + conn.getResponseCode());
            }

            // 读取JSON字符串
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            StringBuilder sb = new StringBuilder();
            String line;
            while ((line = br.readLine()) != null) {
                sb.append(line);
            }
            br.close();
            conn.disconnect();

            // 解析JSON数组为List<Bdetails>
            ObjectMapper objectMapper = new ObjectMapper();
            List<Bdetails> bdetailsList = objectMapper.readValue(sb.toString(), new TypeReference<List<Bdetails>>() {});

            // 创建表格模型并绑定到JTable
            BdetailsTableModel tableModel = new BdetailsTableModel(bdetailsList);
            yourJTable.setModel(tableModel); // 替换成你界面中实际的JTable变量名

            // 可选:自动调整列宽,优化显示效果
            for (int i = 0; i < yourJTable.getColumnCount(); i++) {
                yourJTable.getColumnModel().getColumn(i).setPreferredWidth(150);
            }

        } catch (IOException ex) {
            JOptionPane.showMessageDialog(null, "请求或解析出错: " + ex.getMessage());
            ex.printStackTrace();
        }
    }
});

记得把代码里的yourJTable替换成你Swing界面中实际的JTable变量名。

5. 注意事项

  • 确保REST接口返回的是JSON数组,如果返回单个对象,要调整解析逻辑为单个Bdetails实例
  • 异常处理部分尽量给用户友好提示,不要只打印堆栈信息
  • 如果JSON结构有变动,要同步更新POJO类和TableModel的对应逻辑

这样操作后,点击按钮就能把REST返回的JSON数据自动填充到JTable里啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:55:08