Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何正确检查JSON更新-Java_Java_Json_Loops_Http - Fatal编程技术网

如何正确检查JSON更新-Java

如何正确检查JSON更新-Java,java,json,loops,http,Java,Json,Loops,Http,我正在尝试制作一个程序,通过一个web API检查公告——它连接到一个远程服务器并读取页面上的JSON——我无法测试我的代码,因为服务器还没有启动。这是正确的方法吗 public class AnnouncementChecker implements Runnable{ private final String announcementsURL = "REDACTED"; private String lastAnnouncement = ""; @Override public void

我正在尝试制作一个程序,通过一个web API检查公告——它连接到一个远程服务器并读取页面上的JSON——我无法测试我的代码,因为服务器还没有启动。这是正确的方法吗

public class AnnouncementChecker implements Runnable{

private final String announcementsURL = "REDACTED";
private String lastAnnouncement = "";

@Override
public void run(){
    try {
        URL url = new URL(announcementsURL);
        HttpURLConnection http = (HttpURLConnection) url.openConnection();
        http.setRequestMethod("conditional GET");
        http.setRequestProperty("Connection", "keep-alive");
        http.setUseCaches(true);
        http.setAllowUserInteraction(false);
        if (lastAnnouncement != ""){
            http.setRequestProperty("If-Modified-Since", lastAnnouncement);
        }
        http.setConnectTimeout(10);
        http.connect();
        int status = http.getResponseCode();
        if (status == 304 || (status == 200 && lastAnnouncement == "")){
            lastAnnouncement = http.getHeaderField("Last-Modified");
            BufferedReader br = new BufferedReader(new InputStreamReader(http.getInputStream()));
            StringBuilder sb = new StringBuilder();
            String line;
            while ((line = br.readLine()) != null) {
                sb.append(line+"\n");
            }
            br.close();
            String json = sb.toString();
            JSONParser parser = new JSONParser();
            JSONObject jsonResponse = (JSONObject) parser.parse(json);
            //String announcement = (String) jsonResponse.get("message");
            //TODO What to do with announcement...
        }
        http.getInputStream().close();
        http.disconnect();

    } catch (IOException | ParseException e) {
        e.printStackTrace();
    }
}

}

我建议设置某种测试,尽管服务器不可用。这将为您的问题提供答案,测试将永远在那里,在您对代码进行更改和业务需求更改时保护您

为了帮助您实现这一点,我建议将返回响应的代码和执行解析的代码分开。这样,您就可以独立于创建HTTP连接的部分来测试解析


如果你不知道怎么做,那么我很乐意为你发布一个例子。

你可能应该包括更多关于“this”是什么的上下文。@BenKnoble真的不知道如何解释它了-这对其他人来说似乎是不言自明的:/我计划稍后拆分代码-主要问题是,你看到任何问题了吗?我也会设置一个测试,但这个主服务器计划很快就会启动,不管怎样我只是想提前完成所有的事情:Phttp.setRequestMethod(“条件get”)应该是http.setRequestMethod(“get”)。除此之外,我看不出任何错误,但如果不写测试,我对这句话没有太多信心。您还可以考虑使用HTTP客户端库,甚至是处理JSON解析的库。不确定您是否是Spring粉丝,但Spring RestTemplate在这种情况下很有魅力。