最近项目要调用第三方接口来获取json数据,并解析数据入库。这里用到了kettle作为数据抽取工具。Kettle 除了常规的数据处理之外,还可以模拟发送HTTP client/post ,REST client。
这里顺便讲一下这三个组件的区别之处,省的下次绕迷糊。
1.HTTP Post组件
”post“顾名思义应该就是http请求方式为post,这里查看源码也得到证实,是引入的org.apache.commons.httpclient.methods里面的方法。
try {
if ( isDetailed() ) {
logDetailed( BaseMessages.getString( PKG, "HTTPPOST.Log.ConnectingToURL", data.realUrl ) );
}
// Prepare HTTP POST
//
HttpClient httpPostClient = SlaveConnectionManager.getInstance().createHttpClient();
PostMethod post = new PostMethod( data.realUrl );
// post.setFollowRedirects(false);
下面我用代码模拟了一个get方式的请求,在kettle中使用该组件调用该请求,未获取到结果集。返回结果中提示“系统发生异常”,可想而知,该组件并不支持get方式的请求。(这里顺便提示一下,由于HTTP Client和Post都是查询菜单里的组件,并不是输入流组件,所以使用该组件前面必须要配合输入流的组件使用,否则执行的时候,由于你并没有输入流传入,所以程序自动判断你的转换没有源数据流入,自动结束运行,程序会自动退出,不会执行后面的流程。所以,要切记,使用该组件之前一定要有输入组件,可以将url或者请求参数作为输入流)。
@RequestMapping(value = "/infoTrans", method = GET, produces = "application/json")
public Object infoTrans(HttpServletRequest request, HttpServletResponse response) throws IOException {
// TODO Auto-generated method stub
String attribute = (String)request.getAttribute("p2");
result = "{\r\n" +
"\"BasicResponse\": {\r\n" +
"\"succeeded\": 1\r\n" +
"},\r\n" +
"\"RTDataSets\": [\r\n" +
"{\r\n" +
"\"kksCode\": \"EB002HP4MKA01MK001BN01J1CB001BB02\",\r\n" +
"\"RTDataValues\": [\r\n" +
"{\r\n" +
"\"Value\": 5.5944,\r\n" +
"\"Time\": 1446184512000\r\n" +
"},\r\n" +
"{\r\n" +
"}\r\n" +
"]\r\n" +
"}";
return result;
}
所以。使用该组件的时候,一定要知道你请求的接口请求方式是什么类型的。接下来,那你一定会问,如果HTTP Post是请求Post方式的,那Get方式的怎么请求呢,没错,就是Http Client组件了,不知道官方为什么把组件名命名为这样,而不是叫做HTTP Get,可能命名不好听吧....额,反正我是圆不下去了,管他呢,everything 有毒....,然后我用Client组件请求该接口,ok,一切顺利。
接下来,讲一讲剩下的那两个组件,REST Client和Json数据解析...这里由于笔没水了,想看更多内容,请前往此处..