Gson 返回 null

Gson returning null

我在使用 JSON 时遇到问题,我目前有这个 class 可以将来自我的 api 的 json 响应转换为一个对象,但它返回所有值空 -

public class User {

    public String username;

    public User(String username) throws IOException {
        this.username = username;
        URL url = new URL(urlhere);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        connection.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 1.0.3705)");
        String response = ApiRequest.getResponse(connection);
        connection.disconnect();
        Gson gson = new Gson();
        gson.fromJson(response, this.getClass());
    }

    public int id;
    public String email;
    public String role;
    public String plan;
    public String planEndDate;

}

我是 json 的新手,请记住这一点,我可能遗漏了什么。

JSON 响应示例:

{"id":7,"username":"xx","email":"xx","role":"administrator","plan":"xx","planEndDate":"xx"}

下次你应该读How To Ask and make sure your code is a Minimal Complete Verifiable Example。这里不需要整个网络访问,您可以只在字符串中传递 JSON。做网络的构造函数 I/O 无论如何也是一个非常糟糕的主意,因为它很慢并且在单元测试中很痛苦。

就是说,gson.fromJson returns 一个 User 对象,但您永远不会对它做任何事情;它只是超出范围。

我会把代码改成这样:

public class User {
    public String username;
    public int id;
    public String email;
    public String role;
    public String plan;
    public String planEndDate;

    public static User findByName(String username) throws IOException {
         String json = downloadUserData(username);
         return new Gson().fromJson(json, User.class);
    }

    public static String downloadUserData(String username) throws IOException {
        URL url = new URL(urlhere);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        connection.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 1.0.3705)");
        String response = ApiRequest.getResponse(connection);
        connection.disconnect();
        return response;
    }
}

这样您仍然可以手动构建用户,或者如果必须的话从某个地方下载他们的数据。

User downloaded = User.findByName("me");

User json = new Gson().fromJson("{\"id\": 1, \"username\": \"me\", ... \"}", User.class);

User manually = new User();
manually.username = "me";
manually.email = "me@example.org";
// ...