Java 无法从api调用获取可读数据

Java 无法从api调用获取可读数据,java,rest,http,Java,Rest,Http,我试图调用stack exchange的api来获取stackoverflow用户数据,我可以将其解析为JsonObject,但是我获取的数据是无法读取的垃圾 这是我的密码: String urlName = "https://api.stackexchange.com/2.2/users?site=stackoverflow"; URL url = new URL(urlName); HttpURLConnection conn = (HttpU

我试图调用stack exchange的api来获取stackoverflow用户数据,我可以将其解析为JsonObject,但是我获取的数据是无法读取的垃圾

这是我的密码:

        String urlName = "https://api.stackexchange.com/2.2/users?site=stackoverflow";
        URL url = new URL(urlName);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        if (conn.getResponseCode() != 200) {
            throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
        }
        InputStream inputStream = conn.getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        StringBuilder builder = new StringBuilder();
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            builder.append(line + "\n");
        }
        conn.disconnect();

我做错什么了吗?我遵循了示例代码,但我看不出有什么不同

问题是从
https://api.stackexchange.com/2.2/users?site=stackoverflow
使用GZip压缩。因此,您看到的不可读垃圾实际上是响应的压缩体。并非响应中的所有内容都将被压缩(某些站点可能选择不压缩),因此您需要检查它们是否被压缩。这可以通过使用

conn.getContentEncoding()
将此应用到代码中可以提供:

String urlName = "https://api.stackexchange.com/2.2/users?site=stackoverflow";
URL url = new URL(urlName);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
if (conn.getResponseCode() != 200) {
    throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
}
InputStream inputStream = conn.getInputStream();

if ("gzip".equals(conn.getContentEncoding())) {
    // Is compressed using GZip: Wrap the reader
    inputStream = new GZIPInputStream(inputStream);
}

InputStreamReader streamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(streamReader);
StringBuilder builder = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
    builder.append(line + "\n");
}
conn.disconnect();