`
wei5201
  • 浏览: 187567 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

web开发中远程接口的改观用法

阅读更多
工作中,使用webService 以及 rmi 进行远程接口调用, 经常出现 连接不上的 问题.

于是想到利用url直接post或者get方式,提交给其他系统去做处理.

//jsonp跨域时候使用的参数
private static final String CALLBACK = "callback" ;
//通过actionName来判断对方要调用我们的什么接口
private static final String ACTION_NAME = "actionName" ;
//接口调用完毕之后,返回给对方的参数名称
private static final String KEY_RESULT = "result" ;
//接口调用完毕之后,返回给对方的参数名称,这个message只有出错的时候才会有值
private static final String KEY_MESSAGE = "message" ; 
//对方传过来的url的参数名称
private String requestData ;

public String getRequestData() {
	return requestData;
}

public void setRequestData(String requestData) {
	this.requestData = requestData;
}

//成功调用接口后,返回 RESP_SUCCESS_JSON
private static final JSONObject RESP_SUCCESS_JSON;

static{
	// 初始化固定的json结果
	// success json
	JSONObject json = new JSONObject();
	json.put(KEY_RESULT, SUCCESS);
	RESP_SUCCESS_JSON = json;
}
//调用接口失败后,返回的结果
private JSONObject getErrorJson(String msg){
	JSONObject ret = new JSONObject();
	ret.put(KEY_RESULT, ERROR);
	ret.put(KEY_MESSAGE, msg);
	return ret;
}
public String execute() throws Exception{
	// 解析请求数据
	JSONObject reqJson;
	String action = "" ;
	jsonp = this.getHttpServletRequest().getParameter(CALLBACK);
	try{
		//取出对方传过来的参数值,一串json
		reqJson = JSONObject.fromObject(requestData);
		// 取出action
		action = StringUtils.trimToEmpty(reqJson.getString(ACTION_NAME));
	}catch (Exception e) {
		outputResultJson(getErrorJson("解析json请求错!" + e.getMessage()));
		return null;
	}

		// 执行接口action
	JSONObject respJson = new JSONObject();
	try{
		logger.info("xx系统调用接口:" + action);
		logger.info("传入JSON:" + requestData);
		//根据不同的actionName 调用不同的处理方法
		if(action.equalsIgnoreCase("UpdateApply")){
		// 申请表数据修改
			respJson = updateApply(reqJson.getJSONObject(KEY_DATA));
		}else if(action.equalsIgnoreCase("RateNotice")){
			// 合同费率通知
			// TODO 优先级稍低 郝晶说先不做
			respJson = rateNotice(reqJson.getJSONObject(KEY_DATA));
		}else if(action.equalsIgnoreCase("PickReport")){
			// 调阅审核报告
			respJson = pickReport(reqJson.getJSONObject(KEY_DATA));
		}else if(action.equalsIgnoreCase("AddBlackList")){
			// 加入黑名单
			respJson = addBlackList(reqJson.getJSONArray(KEY_DATA));
		}else if(action.equalsIgnoreCase("updateClicStatus")){
				// 放款,签订合同,等待放款 更新clic状态
			respJson = updateClicStatus(reqJson.getJSONObject(KEY_DATA));
		}
		}catch (Exception e) { //这里的异常可以处理的更细致一些
			respJson = getErrorJson("错误!" + e.getMessage());
		}

		outputResultJson(respJson);

		return null;
	}
	
	/**
	这里是针对jsonp跨域进行的处理,如果对方传了跨域所需的参数CALLBACK过来,并且有值的话,
	使用jsonp的形式给对方返回值,一般适用于对方采用ajax方法调用我们的接口
	*/
private void outputResultJson(JSONObject resultJson) throws IOException{
	this.getHttpServletResponse().setCharacterEncoding("UTF-8");
	if(StringUtils.trimToEmpty(jsonp).length() > 0)
		this.getHttpServletResponse().getWriter().write(jsonp+"("+resultJson.toString()+")");
	else
		this.getHttpServletResponse().getWriter().write(resultJson.toString());
}
	
private JSONObject updateClicStatus(JSONObject reqJsonData) {
	String bsTrasnportId = reqJsonData.getString("bsApplyId");
	String status = reqJsonData.getString("status");
	logger.info("进件号:"+bsTrasnportId+"状态码:"+status);
	Environment.getInstance().getService(TransportService.class).updateClicStatus(Long.parseLong(bsTrasnportId), status);
	return RESP_SUCCESS_JSON;
}



使用过程中,大量的接口使用在ajax调用中,这时只能采用jsonp进行跨域.

而又有很多是直接在service中调用,这时候,就只能采用模拟提交表单方式了:
/**
	 * 获得信审1.0接口地址连接
	 * @return
	 */
	private static HttpURLConnection getClic1InterfaceConn() throws Exception{
		URL u = new URL(Property.getConstants("CHARGE_DETAIL"));
		HttpURLConnection conn = (HttpURLConnection)u.openConnection();
		conn.setDoOutput(true);
		conn.setRequestMethod("POST");
		conn.setUseCaches(false);
		
		return conn;
	}


        public static void synLoanData(){
            List<Map> mcsMap = new ArrayList<Map>();
			for(MortgagorContact mc : mcs){
				//把对象转换成key,value形式的map	
				mcsMap.add(BeanUtils.describe(mc)); 
			 // 组织json
			 JSONObject data = new JSONObject();
			 data.put("bsApplyId", String.valueOf(trans.getBsApplyId()));
			 data.put("decision", BeanUtils.describe(bd));	// 决策信息
			data.put("contact", mcsMap);	// 取联系人
			data.put("status", StringUtils.trimToEmpty(trans.getProcessNode()));	// 进件状态
                         }
			// 提交 ,获得其他系统的接口链接
			HttpURLConnection conn = getClic1InterfaceConn();
			try{
				log.info("同步数据JSON:" + data.toString());
				OutputStream os = conn.getOutputStream();
				//往接口中提交参数
				IOUtils.write("act=borrow", os); 
				IOUtils.write("&client=" + URLEncoder.encode(data.toString(), "utf-8"), os);
				os.flush();
				os.close();
				String response = IOUtils.toString(conn.getInputStream());
				log.info("同步数据给信审1.0,[Response:" + response + "]");
			}finally{
				conn.disconnect();
			}
}




如果采用大量的不同的url去做处理,会造成大量的配置文件,造成管理上的混乱,所以采用一个url,根据参数的不同去调用不同的处理方式去解决.
//根据不同的actionName 调用不同的处理方法
根据参数 action的值,去判断调用哪个service方法.

这样就相当通用了.

:)
分享到:
评论

相关推荐

    基于VisualC++开发环境绘制PNG按钮的方法

    GDI+的出现使这一现象大为改观,它是微软的.Net Framework的一个重要组成部分,大大增强windows的图形图像开发接口,同时它也改变了传统的GDI编程模式,使开发工作大幅度简化.首先从理论角度介绍GDI+的种种优越特性...

    Linux生态环境日益改观.pdf

    Linux生态环境日益改观.pdf

    Ajiu AspWebServer V2.0 服务器 (版本号2.0.2.4)

    对选项稍有点改观... 2007-6-29 双击在默认的浏览器中打开,而不一定是internet explorer!(windows xp sp2,默认The World浏览器中测试通过,其它系统其它默认浏览器请帮忙测试一下 2007-7-2 小失误更新 2007-7-...

    植物对空气环境的改观影响ppt模板.rar

    在制作或使用这份PPT时,可以包括以下内容:不同植物种类对空气污染物的吸收能力对比、城市绿化项目对空气质量改善的实例分析、以及个人和社区如何参与改善空气质量的建议。 总的来说,植物在改善空气环境方面扮演...

    论WEB标准在中国的灰飞烟灭

    Web标准,一种旨在提高网页质量和可访问性的规范,自20世纪末引入中国以来,一直在中文互联网领域中经历着曲折的发展。尽管有一群热衷于标准化应用的开发者,他们通过翻译和实践推动着Web标准在国内的传播,但其普及...

    使用XMLHttpRequest对象.doc

    XMLHttpRequest 对象最早是在 IE 5 中以 ActiveX 组件形式实现的,并且只能在 IE 中使用。直到 Mozilla 1.0 和 Safari 1.2 把它采用为事实上的标准,情况才有改观。虽然 XMLHttpRequest 并不是一个 W3C 标准,但是...

    农村教育要改观.docx

    【农村教育改观】\n\n农村教育是中国教育体系中的重要组成部分,对于国家整体发展具有深远影响。然而,当前农村教育面临着诸多挑战,这需要我们深入探讨并采取有效措施进行改革。\n\n首先,农村教育的硬件设施普遍...

    28个让关键词排名明显改观的SEO技巧

    ### 28个让关键词排名明显改观的SEO技巧 #### 一、关键词优化策略 1. **关键词位置**:确保关键词出现在重要的位置上,比如网页的标题、元描述、H1/H2标签等。 2. **关键词密度**:保持合理的关键词密度(6%-8%)...

    Linux竞争走向综合化,生态环境日益改观.pdf

    Linux竞争走向综合化,生态环境日益改观.pdf

    移动搜索进步改观 竞价广告更骨感.docx

    ### 移动搜索进步改观 竞价广告更骨感 #### 背景介绍 随着信息技术的飞速发展,互联网已经深入人们生活的各个方面。移动互联网作为一种新兴的信息技术形态,近年来得到了迅猛的发展,逐渐成为了互联网的主要形式之...

    配电网webgis研究与开发-自动化.doc

    为了实现这些功能,文章详细探讨了WebGIS系统的开发方法,包括对系统架构的设计、对GIS引擎的选择以及对数据库的管理等关键技术的分析。例如,文章中提到了利用ArcGIS作为GIS软件平台,运用SQL进行数据库管理,以及...

    建筑装饰行业研究周报:建筑板块预期较差、未来或将改观.zip

    2. 政策调整:政府对房地产市场的调控政策持续收紧,限制了房地产开发的投资热情,从而间接影响到建筑装饰行业的订单量。此外,环保政策的强化使得部分项目面临成本上升的压力。 3. 行业内部挑战:建筑行业的利润率...

    建筑装饰行业研究周报:建筑板块预期较差、未来或将改观.pdf

    建筑装饰行业研究周报:建筑板块预期较差、未来或将改观.pdf

    2021-2025年中国汽车检测维修设备行业农村市场开发与拓展战略研究报告.pdf

    报告《2021-2025年中国汽车检测维修设备行业农村市场开发与拓展战略研究报告》主要探讨了中国汽车检测维修设备行业的发展现状、行业监管体制、行业的发展特征以及行业未来发展趋势等方面的内容,并针对农村市场的...

    钢铁行业:需求若无改观,则钢价仍有下行压力-0805-中信建投-28页.pdf

    钢铁行业:需求若无改观,则钢价仍有下行压力-0805-中信建投-28页.pdf

    阳江市小水电开发的现状以及当前小水电发展面临主要问题及对策.docx

    本文将深入探讨阳江市小水电开发的现状,分析当前发展过程中存在的主要问题,并提出相应的解决对策。 阳江市拥有理论蕴藏量为67.7万KW、技术可开发量为35万KW以及经济可开发量为31.66万KW的水力资源。这些资源的...

    植物对空气环境的改观影响ppt模板.ppt

    标题和描述中提到的是关于植物如何改善室内空气环境的一个PPT模板,主要关注点在于不同种类的植物如何作为天然的空气净化器,通过吸收有害气体、释放氧气和改善空气质量来优化我们的生活环境。以下将详细阐述这些...

    ROCKEY6 SMART 方案

    ROCKEY6 SMART 加密锁的基本工作原理是将应用软件的核心算法与数据移植到加密锁中,然后通过输入输出接口同计算机上面的主程序交换数据,从而实现真正的黑盒子保护。 ROCKEY6 SMART 加密锁的推出,大大改观了软件...

Global site tag (gtag.js) - Google Analytics