java - 处理巨大的 JSON 响应

标签 java android rest jackson

我认为我需要重写应用程序的一些模块,因为当渲染的实体数量增加时,它也会失败并出错。目前,我正在使用 JacksonHttpClient。尽管我非常信任 jackson ,但有件事告诉我问题出在第二个库上。 HttpClient 可以处理大响应吗? (例如 this one 大约 400 行)

除此之外,在我的应用程序中,我解析请求的方式如下:

public Object handle(HttpResponse response, String rootName) {
    try {
        String json = EntityUtils.toString(response.getEntity()); 
        // better "new BasicResponseHandler().handleResponse(response)" ????
        int statusCode = response.getStatusLine().getStatusCode();
        if ( statusCode >= 200 && statusCode < 300 ) {
            return createObject(json, rootName);
        }
        else{
            return null;
        }
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

public Object createObject (String json, String rootName) {
    try {
        this.root = this.mapper.readTree(json);
        String className = Finder.findClassName(rootName);
        Class clazz = this.getObjectClass(className);
        return mapper.treeToValue(root.get(rootName), clazz);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

如何改进这段代码,使其在处理大型响应时更加高效?

提前致谢!

最佳答案

无需创建String json,如 ObjectMapper#readTree也可以接受InputStream。例如,这会稍微更有效:

public Object handle(HttpResponse response, String rootName) {
    try {
        int statusCode = response.getStatusLine().getStatusCode();
        if ( statusCode >= 200 && statusCode < 300 ) {
            return createObject(response.getEntity().getContent(), rootName);
        }
        else{
            return null;
        }
    } catch (Exception e) {
        throw new RuntimeException(e);
    }

}

public Object createObject (InputStream json, String rootName) {
    try {
        this.root = this.mapper.readTree(json);
        String className = Finder.findClassName(rootName);
        Class clazz = this.getObjectClass(className);
        return mapper.treeToValue(root.get(rootName), clazz);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

关于java - 处理巨大的 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25530679/

相关文章:

java - 任务 ':app:compileDebugNdk' 执行失败无法运行此命令 ndk-build.cmd

java - 如何获取所有实现指定接口(interface)的类

java - 将变量添加到framework.jar后,它仍然无法访问

android - 如何使用 Flutter 从 Firebase 获取当前活跃用户?

rest - 有没有人尝试使用 Asana API 进行备份

apache - 保护 Apache 提供的静态内容

java - JButton 在 Action 监听器和鼠标监听器完好无损的情况下不执行任何操作

java - 使用 java programmig 读取 Ubuntu 14.04 鼠标事件文件 (/dev/input/event3) 时出错

java - 从 Web 服务编辑 Android 中的文本字段验证

java - Jersey ,如何发布 JSON 对象列表?