HttpEntity转为List

HttpEntity转为List前言继续之前的工作 获取 Impala 的接口信息后 将其转换为 ListJavaBean 的形式 方便后续程序处理 Code 删除大部分 留点主要的处理过程 1JavaBean 首先要对应一些 java 类 可以直接借鉴 cmjavaapi 的 model 有三个类 其中 TaskBase 最重要 importjava util concurrent TimeUnit Task 信息实体类 和接口中

前言

继续之前的工作,获取Impala的接口信息后,将其转换为List
的形式,方便后续程序处理。

Code

删除大部分,留点主要的处理过程。

1 JavaBean

首先要对应一些java类,可以直接借鉴cm java api的model。

有三个类,其中TaskBase最重要。

import java.util.concurrent.TimeUnit; / * Task信息实体类(和接口中获取的信息对应) * Created by Dante on 2016/3/25. */ public class TaskBase { 
    private String queryId; private String statement; private String queryType; private String queryState; private String startTime; private String endTime; private String rowsProduced; private String user; private String detailsAvailable; private String database; private Long durationMillis; private Long durationMinutes; //此处有诡异 private Coordinator coordinator; private Attributes attributes; }
import com.google.gson.annotations.SerializedName; / * 从接口中获取到的Query信息Attributes实体类。 * query的部分信息 * Created by Dante on 2016/3/25. */ public class Attributes { 
    @SerializedName("thread_storage_wait_time") private String threadStorageWaitTime; @SerializedName("session_id") private String sessionId; @SerializedName("planning_wait_time") private String planningWaitTime; @SerializedName("thread_total_time") private String threadTotalTime; @SerializedName("stats_missing") private String statsMissing; @SerializedName("thread_network_send_wait_time_percentage") private String threadNetworkSendWaitTimePercentage; @SerializedName("thread_cpu_time_percentage") private String threadCpuTimePercentage; @SerializedName("thread_network_receive_wait_time_percentage") private String threadNetworkReceiveWaitTimePercentage; @SerializedName("file_formats") private String fileFormats; @SerializedName("planning_wait_time_percentage") private String planningWaitTimePercentage; @SerializedName("client_fetch_wait_time") private String clientFetchWaitTime; @SerializedName("client_fetch_wait_time_percentage") private String clientFetchWaitTimePercentage; @SerializedName("pool") private String pool; @SerializedName("session_type") private String sessionType; @SerializedName("connected_user") private String connectedUser; @SerializedName("thread_network_receive_wait_time") private String threadNetworkReceiveWaitTime; @SerializedName("cm_cpu_milliseconds") private String cmCpuMilliseconds; @SerializedName("impala_version") private String impalaVersion; @SerializedName("thread_network_send_wait_time") private String threadNetworkSendWaitTime; @SerializedName("network_address") private String networkAddress; @SerializedName("query_status") private String queryStatus; @SerializedName("estimated_per_node_peak_memory") private String estimatedPerNodePeakMemory; @SerializedName("thread_storage_wait_time_percentage") private String threadStorageWaitTimePercentage; @SerializedName("thread_cpu_time") private String threadCpuTime; } 
/ * 从接口中获取到的Query信息Coordinator的实体类 * Coordinator的hostID * Created by Dante on 2016/3/25. */ public class Coordinator { 
    private String hostId; public String getHostId() { return hostId; } public void setHostId(String hostId) { this.hostId = hostId; } } 

调用接口类

接口

import com.lagou.impala.dante.entity.TaskBase; import java.util.List; / * Task的操作相关接口 * Created by Dante on 2016/3/25. */ public interface ITaskTools { 
    / * 和cm的管理界面相似,返回最近的几个查询。没有参数 */ public List 
   
   getRecent(); } 
  

实现

/ * Task执行实现类 * cm接口太坑,很多filter没有用,不能加限制条件 * @// TODO: 2016/3/25 : 更改为http连接池的形式,提高性能。 * Created by Dante on 2016/3/25. */ public class DefaultTaskImpl implements ITaskTools{ 
    CredentialsProvider credsProvider = new BasicCredentialsProvider(); String username = ""; String password = ""; String queryBase = ""; //区分从接口获得数据的queries和warning String queryMemberName = ""; @Override public List 
   
   getRecent() { 
   //设置认证 credsProvider.setCredentials( 
   new AuthScope( 
   "", AuthScope.ANY_PORT), 
   new UsernamePasswordCredentials(username, password)); CloseableHttpClient httpclient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build(); 
   //get HttpGet httpget = 
   new HttpGet(queryBase); List 
   
     taskBasesList = 
    new LinkedList<>(); CloseableHttpResponse response = 
    null; 
    try { response = httpclient.execute(httpget); HttpEntity entity = response.getEntity(); 
    //将HttpEntity装换为List 
      taskBasesList = JsonUtil.httpEntityToJsonArray(entity, queryMemberName); } 
    catch (IOException e) { e.printStackTrace(); } 
    return taskBasesList; } } 
    
  

HttpEntity转List

import com.google.gson.*; import com.lagou.impala.dante.entity.TaskBase; import org.apache.http.HttpEntity; import org.apache.http.util.EntityUtils; import java.io.IOException; import java.util.LinkedList; import java.util.List; / * Created by Dante on 2016/3/25. */ public class JsonUtil { 
    private static Gson gson = new Gson(); private static JsonParser jp = new JsonParser(); / * 从HttpEntity获取数据,并转换为相应的List 
   
     */ 
    public static List 
   
   httpEntityToJsonArray(HttpEntity entity, String queryMemberName) { List 
   
     taskBaseList = 
    new LinkedList<>(); 
    try { 
    //将HttpEntity装换为List 
      
    if (entity != 
    null) { 
    //先转为String String retSrc = EntityUtils.toString(entity); 
    //转为JsonElement JsonElement je = jp.parse(retSrc); 
    //通过JsonElement转为JsonObject JsonObject ja = je.getAsJsonObject(); 
    //根据queryMemberName 得到JsonArray JsonArray jaa = ja.getAsJsonArray(queryMemberName); 
    for (JsonElement joo : jaa) { taskBaseList.add(gson.fromJson(joo, TaskBase.class)); } } } 
    catch (IOException e) { e.printStackTrace(); } 
    return taskBaseList; } } 
    
  

小测试

code

 @org.junit.Test public void getRecent(){ ITaskTools itt = new DefaultTaskImpl(); List 
  
    taskBaseList = itt 
   .getRecent() 
   ; for(TaskBase tt :taskBaseList) { System 
   .out 
   .println(tt 
   .getQueryState()) 
   ; System 
   .out 
   .println(tt 
   .getDurationMillis()) 
   ; System 
   .out 
   .println(tt 
   .getDurationMinutes()) 
   ; } } 
  

结果

CREATED  104 CREATED  16 FINISHED 621 0 

总结

CM的rest api比较坑,虽说大部分功能都没什么问题,但是一些细节明显不够,比如说文档里面的额filter,很多条件都没有用,比如说只获取正在运行的任务,这点使用rest是获取不了的,怎么调试都没通,所以只能先获取最近的所有任务,然后再筛选,总感觉这样很sb……

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224312.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午12:13
下一篇 2026年3月17日 下午12:13


相关推荐

  • ThinkPHP5旅游管理系统

    ThinkPHP5旅游管理系统Q1115487855ThinkPHP5旅游管理系统一系统介绍本旅游管理系统基于ThinkPHP5开发,系统角色分为用户和管理员两种,系统分为前后台,用户可在前台注册登录、发布行程单和游记等,管理员登录后台进行管理。技术栈ThinkPHP5+mysql+bootstrap+jquery+vscode+phpstudy二系统功能用户1注册/登录/注销2个人中心

    2022年4月30日
    59
  • 接口自动化测试实践指导(下):接口自动化测试断言设置思路

    接口自动化测试实践指导(下):接口自动化测试断言设置思路在测试用例中 绑定 API 文档之后 当 API 发生变化时 您可以一键将文档内容同步到测试步骤中 减轻维护用例的成本

    2026年3月19日
    2
  • Redis(Redis简介和基本命令)[通俗易懂]

    Redis(Redis简介和基本命令)[通俗易懂]这里写目录标题NoSQLRedisNoSQLNoSQL == Not Only SQL(不仅仅是关系型数据库)出现原因:随着web2.0互联网的诞生,传统的关系型数据库很难对付web2.0时代!尤其是超大规模的高并发的社区,暴露出来很多难以克服的问题,NoSQL在当今大数据环境下发展的十分迅速,Redis是发展最快的。RDBMS 和 NoSQL的对比RDBMS 结构化组织SQL数据和关系都存在单独的表中 row col操作,数据定义语言严格的一致性基础的事务NoSQL不仅仅是数

    2022年8月8日
    7
  • Matlab一维小波分解流程

    Matlab一维小波分解流程Matlab 一维小波分解流程 Matlab 一维小波分解流程 1 将待分解变量 x 放入工作空间 2 在命令窗口输入 wavemenu 3 在弹出的对话框里选择 One Dimensional gt Wavelet 1 D 4 在弹出的对话框里选择 File gt ImportfromWo gt ImportSignal 以导入信号 5 在弹出的对话框里选择待分解变量 x Filter 不变

    2026年3月26日
    2
  • 推荐6个好用到爆的Pycharm插件

    推荐6个好用到爆的Pycharm插件相信对于不少的 Python 程序员们都是用 Pycharm 作为开发时候的 IDE 来使用的 今天小编来分享几个好用到爆的 Pycharm 插件 在安装上之后 你的编程效率 工作效率都能够得到极大地提升

    2026年3月27日
    5
  • 卡巴斯基中国官方技术论坛即将开放[通俗易懂]

    卡巴斯基中国官方技术论坛即将开放[通俗易懂]卡巴斯基筹备已久的官方技术论坛近期将上线,将给众多卡巴斯基粉丝和技术爱好者提供一个沟通交流的平台。早前,卡巴斯基顺应本地化服务策略,开通400技术支持热线。在艾瑞最新的一份报告中,国内安全软件市场三强的排名改头换面,卡巴斯基…

    2022年8月20日
    16

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号