java调用http接口(HttpURLConnection的使用)

java调用http接口(HttpURLConnection的使用)

最近项目的一个模块,需要调用另一个项目的接口, 找到以前写的java调用http接口的,发现太粗略了,就扒了扒网上诸大神的笔记,整理了一份进阶版的代码,方便以后使用。如果不合理的地方,忘指教,共同学习,共同进步!废话不多说,直接上代码。

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.sql.SQLException;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import cn.com.easy.annotation.Controller;
import cn.com.easy.core.sql.SqlRunner;
import net.sf.json.JSONObject;

/**
 * @Title: HttpTestAction.java
 * @Package 
 * @Description: java调用http接口
 * @version V1.0
 */
public class HttpTestAction{
	private static SqlRunner runner;
	private static final Log LOG = LogFactory.getLog(HttpTestAction.class);
	
	public static JSONObject load(String url,String data){
		String encoding = "UTF-8";
	    HttpURLConnection httpConnection = null;
	    PrintWriter printWriter = null;//
        StringBuilder stringBuilder = new StringBuilder(); // 用来存储响应数据
        InputStream inputStream = null;
        BufferedReader bufferedReader = null;
        JSONObject resultJson = null;
		try {

            URL targetUrl = new URL(url);
            // 新建链接实例
            httpConnection = (HttpURLConnection) targetUrl.openConnection();
            // 设置链接超时时间,单位毫秒
            httpConnection.setConnectTimeout(2000);
            // 设置读取数据超时时间,单位毫秒
            httpConnection.setReadTimeout(2000);
            // 是否打开输出流true|false
            httpConnection.setDoOutput(true);
            httpConnection.setDoInput(true);
            // 设置提交方法 POST|GET
            httpConnection.setRequestMethod("POST");
            // 是否使用缓存true|false
            httpConnection.setUseCaches(false);
            httpConnection.setRequestProperty("Accept-Charset", encoding);
            // 标准的HTTP POST是一种application/x-www-form-urlencoded 类型的网络表单,传递的参数都会被写入请求信息主体中
            // httpConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset="+encoding);
            httpConnection.setRequestProperty("Content-Type", "application/json");
            
            // 建立连接 (请求未开始,直到connection.getInputStream()方法调用时才发起,以上各个参数设置需在此方法之前进行)
            httpConnection.connect();

            //获取URLConnection对象对应的输出流
            printWriter = new PrintWriter(httpConnection.getOutputStream());
            //发送请求参数即数据
            printWriter.print(data);
            // 输出完成后刷新并关闭流
            printWriter.flush();
            printWriter.close();
            
            // 这里返回200,则是成功调用接口,否则失败
            if(httpConnection.getResponseCode()==200){
            	// 得到响应流
            	inputStream = httpConnection.getInputStream();
            	// 处理服务器响应  (将从连接获取到输入流包装为bufferedReader)
            	bufferedReader = new BufferedReader(new InputStreamReader(inputStream,encoding)); 
            	String line;
            	// 循环读取流,若不到结尾处
            	while ((line = bufferedReader.readLine()) != null) {
            		stringBuilder.append(line);
            	}
            	//关闭流
            	bufferedReader.close(); 
            	inputStream.close();
            }else{
            	stringBuilder.append("{\"success\":\"false\",\"message\":\"调用http接口失败!\"}");
            }
            
            // 关闭连接
            httpConnection.disconnect(); 
            // 转换成json对象
            resultJson = JSONObject.fromObject(stringBuilder.toString());
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(printWriter!=null){
				printWriter.close();
			}
			if(httpConnection!=null){
				httpConnection.disconnect();
			}
		}

        return resultJson;
	}
    /**
     * 这里是本人进行的调试,作为记录使用,仅供参考
     */
	public static void main(String[] args) throws Exception {

		// http接口地址
		String urlHead = "http://127.0.0.1:8089/bpm/bpmservice";
		// 流程模板编码
		String modelKey = "HR_INTEGRAL_EXCHANGEPLAN_APPLY";
		//String applyId = initApplyId();
		// 流程申请编码
		String applyId = "QJ-20190312105823001";
		// 流程发起人编码
		String loginId = "admin";
		// 流程接收人编码
		String staffCode = "10001";
		//URLEncoder.encode()方法  为字符串进行编码
		String userName = URLEncoder.encode("管理员","UTF-8");
					
		// 1:新建流程
		JSONObject result1 = load(urlHead+"/process/startProcessByModelKey?loginId="+loginId+"&modelKey="+modelKey,"{applyId:'"+applyId+"',userName:'"+userName+"',staffCode:'"+staffCode+"'}");
		System.out.println("processInstanceId:"+result1.get("processInstanceId"));
		if(result1.getString("success")=="true"){
			// 2:根据流程实例获取待办任务id
			JSONObject result2 = load(urlHead+"/worktask/getUserTaskByPId?loginId="+staffCode+"&processInstanceId="+result1.get("processInstanceId"),"");
			System.out.println("taskId:"+result2.get("taskId"));
			
			if(result2.getString("success")=="true"){
				// 3:根据流程id获取流程信息
				JSONObject result3 = load(urlHead+"/worktask/getTaskDealInfo?loginId="+staffCode+"&taskId="+result2.get("taskId"),"");
				String array = result3.getString("taskDealInfo");
				JSONObject result4 = JSONObject.fromObject(array);
				System.out.println("formUrl:"+result4.get("formUrl"));
				
				if(result4.getString("success")=="true"){
					// 4:拼接待办页面url
					String formUrl = result4.get("formUrl")+"?applyId="+applyId+"&flowInstId="+result1.get("processInstanceId")+"&taskId="+result2.get("taskId");
					System.out.println("待办页面url:"+formUrl);
				}
			}
		}
	}
	
	public static String initApplyId(){
		// 获取当前时间当做任务编码的sql
		String sql = runner.sql("hr.integralManagement.getSystem");
		Map<String, String> map;
		String applyId = "";
		try {
			map = runner.queryForMap(sql);
			if(map.get("APPLYID") != null&& !("").equals(map.get("APPLYID"))){
				applyId = "QJ-"+map.get("APPLYID");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return applyId;
		
	}
}

吐槽一下:HTML编辑器太不好用了,插入一段java代码,格式都乱了,调了几次,还是这样,明明编辑的时候格式也是对的,但是发布后就成了这个鬼样子,什么情况

转载于:https://my.oschina.net/shuming/blog/3028000

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/101025.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 生存分析(Survival Analysis)、Cox风险比例回归模型(Cox proportional hazards model)及「建议收藏」

    生存分析(Survival Analysis)、Cox风险比例回归模型(Cox proportional hazards model)及「建议收藏」生存分析(SurvivalAnalysis)、Cox风险比例回归模型(Coxproportionalhazardsmodel)及C-index1.生存分析生存分析指的是一系列用来探究所感兴趣的事件的发生的时间的统计方法。常见的有1)癌症患者生存时间分析2)工程中的失败时间分析等等。1.1定义给定一个实例iii,我们用一个三元组来表示(Xi,δi,Ti)(X_i,\del…

  • matlab中plot函数的功能及用法_plot绘制什么图

    matlab中plot函数的功能及用法_plot绘制什么图使用plot绘制二维图像本文转自http://blog.sina.com.cn/s/blog_d8f783c90102woqb.html以及https://blog.csdn.net/alvern_zhang/article/details/51153058MATLAB中plot函数常常被用于绘制各种二维图像,其用法也是多种多样,本文仅介绍plot函数的基本用法——使用plot函数绘制二维点图和线…

    2022年10月16日
  • 医疗大数据平台的主流解决方案和设计

    医疗大数据平台的主流解决方案和设计  从价值服务提供的角度来看,这是一个需要对来自多源异构(时间序列)数据进行高效处理提供各种公共能力的资源池,也是促使用户/患者与医护人员及机构进行服务提供和安全可靠交互的控制中心。其主要特征包括平台的开放性、模块化、灵活性和可扩展性等,它肩负着多重重要的角色:一是需要支持多种可穿戴设备和数据类型的标准化接入,并具备大规模接入并发处理能力;必须尽量采用国内外标准化组织及行业通用的标准化协议和规…

  • VS2019 为什么我的C++程序不能在别人电脑运行

    VS2019 为什么我的C++程序不能在别人电脑运行

    2021年11月23日
  • 一世12年龄在泥土还在打,硅谷00创业毕竟开始播放!

    一世12年龄在泥土还在打,硅谷00创业毕竟开始播放!

  • 数仓建模与分析建模_数据仓库建模与数据挖掘建模

    数仓建模与分析建模_数据仓库建模与数据挖掘建模1.数仓概述数据仓库:数据仓库是一个面向主题的、集成的、非易失的、随时间变化的数据集合。重要用于组织积累的历史数据,并且使用分析方法(OLAP、数据分析)进行分析整理,进而辅助决策,为管理者、企业系统提供数据支持,构建商业智能。面向主题:为数据分析提供服务,根据主题将原始数据集合在一起。集成的:原始数据来源于不同的数据源,要整合成最终数据,需要经过ETL(抽取、清洗、转换)的过程。非易失:保存的数据是一系列历史快照,不允许被修改,只允许通过工具进行查询、分析。时变性:数仓会定期接收、集成新的

发表回复

您的电子邮箱地址不会被公开。

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