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

