我有一个网络服务,它根据查询输入一个一个地返回 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/