java - 使用 Java 使用来自 RESTful Web 服务的 json 字符串结果填充 jtable

标签 java json swing rest jtable

我有一个网络服务,它根据查询输入一个一个地返回 JSON 字符串,对服务的 GET 请求返回这个(数据库中只有一个条目)

[{"checked":false,"dateposted":"2014-10-23T00:00:00","itemnumber":1,"quantity":5,"stockcheckid":1}]

目前我只是在一个 while 循环中有这个 System.out.println

我想要做的是能够以一种方式访问​​这些结果,我可以将它们输入到 jtable 中以显示在客户端应用程序上。我已经阅读了一些关于从 JSON 文件等读取的指南,但我找不到任何特定于 REST Web 服务的内容。我听到很多人提到 GSON,我试过了,但我不太清楚如何让它在这种情况下工作

我还应该提到,该服务还可以以 XML 格式发送此数据。

我是否以某种方式创建了一个 JSON 文件,将每个新条目附加到它?然后从该文件填充表格?

无论如何,这是启动 GET 请求的代码。

public static void getRequest(String dataGet) {
  try {
        URL url = new URL("http://localhost:8080/nXXXXXXXXc/webresources/entities.stockchecks/" + dataGet);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Accept", "application/json");

        if (conn.getResponseCode() != 200) {
                throw new RuntimeException("Failed : HTTP error code : "
                                + conn.getResponseCode());
        }

        BufferedReader br = new BufferedReader(new InputStreamReader(
                (conn.getInputStream())));

        String output;
        while ((output = br.readLine()) != null) {
                System.out.println(output);
        }

        conn.disconnect();

  } catch (MalformedURLException e) {

        e.printStackTrace();

  } catch (IOException e) {

        e.printStackTrace();

  }

}`

最佳答案

响应是一张 map 。您可以像这样使用 Jackson 将 JSON 映射序列化为 Java 映射:

import static org.junit.Assert.assertEquals;
import java.io.IOException;
import java.util.Map;
import java.util.TreeMap;
import org.junit.Test;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JSONtoMap {

    public static final String json = "{\"B\":\"b\",\"C\":\"c\"}";

    public static class POJO{

        private Map<String,String> map = new TreeMap<String,String>();

        @JsonAnyGetter
        public Map<String, String> get() {
            return map;
        }

        @JsonAnySetter
        public void set(String name, String value) {
            map.put(name, value);
        }

    }

    @Test
    public final void test() throws JsonProcessingException, IOException {
        ObjectMapper jsonmapper = new ObjectMapper();
        POJO p = jsonmapper.readValue(json, POJO.class);
        assertEquals(jsonmapper.writeValueAsString(p),json);    
    }

}

我想您可以使用 GSON 做类似的事情。另一种选择是,如果您知道 JSON 对象的结构 - 在这种情况下,您可以制作一个简单的 POJO 版本并反序列化到该版本中,而不是像我上面定义的 POJO 类那样的东西。

更多细节和支持XML as well as JSON mapping的类似版本

关于java - 使用 Java 使用来自 RESTful Web 服务的 json 字符串结果填充 jtable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26526200/

相关文章:

java - 将 JSON 文件中的 JSON 数组解析为 Java ArrayList

MYSQL根据AS结果过滤查询结果

java - 应用程序窗口获得焦点并调整大小

java - 单击鼠标重新绘制框架?

java - 为什么幻灯片不能在使用 Swing 和 Awt 的 Java 中运行?

Java:是否不鼓励 child 压倒 parent ?

Java 数组声明括号放置

ios - 在 objective-c 中使用全局变量

swing - 添加 TableRowSorter 添加值到模型后导致 java.lang.IndexOutOfBoundsException : Invalid range

java - Blackberry Webworks 与 Java API 交互