亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

jsonP格式接口實現

發布時間:2020-07-27 21:27:38 來源:網絡 閱讀:2537 作者:gaochaojs 欄目:開發技術

  單位開發了一個app系統,app外包,服務由自開發的薪資查詢系統提供。app與后端交互采用jsonp解決跨域問題。

  JSONP的實現,需要加上一個callback,JSONP和普通JSON的區別在于普通JSON,返回時

out.write("{name:'Xie Feng'}");

  而jsonp的返回則是

out.write("callback({name:'Xie Feng'}");

  callback實際是一個js端的函數名稱,雙方可以任意約定

  所以對于服務器端唯一區別在于,返回的string多一個callback(xxxx)

  • jsonp只能使用get請求,解決同源問題,返回javascript代碼,因為請求javascript文件是沒有同源問題的。 

  • 當請求數據類型為jsonp時,會將callback=jsonpCallback加在url上,http://localhost:8090/api/testcallback=jsonpCallback 

  • 前臺javascript中定義jsonpCallback函數,此函數必須定義在window下,也就是全局的函數,否則找不到。 

  • 后臺獲取請求的callback參數值jsonpCallback,返回字符串"jsonpCallback(result)",result為返回結果。 

  • 請求返回的是script tag,首先會調用jsonpCallback函數,不管是否找到該函數,都會調用success函數。 

  • 如果沒有定義jsonp和jsonpCallback,jsonp默認為"callback",jsonpCallback會是Jquery自動生成的函數名。 


  可以參考例子。

  代碼如下,struts配置:

<action name="querySalaryByKeyForApp" class="salaryAction" method="querySalaryByKeyForApp">
			<result name="success">jsonp.jsp</result>
		</action>

jsonp.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
 
String jsoncallback = request.getParameter("callback");
String jsonResult = (String)request.getAttribute("salaryResult");
out.println("callback("+jsonResult+")");
%>

方法實現

	public String querySalaryByKeyForApp() {
		try{
			SalUserEntity salUserQuery = new SalUserEntity();
			if(salaryVo == null || salaryVo.getSalaryEntity() == null){
				salaryResult = "{errorMsg : 錯誤}";
				return SUCCESS;
			}
			String staffId = salaryVo.getSalaryEntity().getStaffId();
			String year = salaryVo.getSalaryEntity().getYear();
			String month = salaryVo.getSalaryEntity().getMonth();
			String password = salaryVo.getSalaryEntity().getPassword();
			if(StringUtils.isEmpty(staffId) || StringUtils.isEmpty(year) || StringUtils.isEmpty(month) 
					|| StringUtils.isEmpty(password)){
				salaryResult = "{errorMsg : 錯誤}";
				return SUCCESS;
			}
			salUserQuery.setStaffId(staffId);
			salUserQuery.setPassword(password);
			if(salUserService.valUser(salUserQuery)){
			
				salUserService.valUser(salUserQuery);
				List<SalaryEntity> entities = salaryService.querySalaryList(salaryVo.getSalaryEntity());
				if(entities == null || entities.size() != 1){
					throw new SalaryException("您的薪資數據未錄入,新聯系HR!");
				}
				List<Map<String, Object>> valueMap = entity2ListOfMap(entities.get(0));
				
				
				JSONArray jsonObject = JSONArray.fromObject(valueMap);
				
				salaryResult = jsonObject.toString();
			//	jsonObject.accumulate("jsonObject",entities.get(0));
			//	salaryVo.setSalaryEntity(entities.get(0));
				return SUCCESS;
			} else {
				salaryResult = "{errorMsg : 錯誤}";
				return SUCCESS;
			}
		}catch (Exception e) {
			salaryResult = "{errorMsg : 錯誤}";
			return SUCCESS;
		}
		//return ERROR;
	}

json轉換:

	private JSONArray entity2ListOfMap(SalaryEntity salary) {
		if(salary == null){
			salary = new SalaryEntity();
			return entity2ListOfMap(salary);
		}
		JSONArray result  = new JSONArray();
		JSONObject basicInfo = new JSONObject();//基本信息
		JSONObject wageInfo = new JSONObject();//應發工資
		JSONObject buckleInfo = new JSONObject();//實扣工資
		JSONObject realInfo = new JSONObject();//實發工資
		JSONObject gscdInfo = new JSONObject();//公司承擔
		
		JSONArray basicMap = new JSONArray();
		JSONArray wageMap = new JSONArray();
		JSONArray buckleMap = new JSONArray();
		JSONArray realMap = new JSONArray();
		JSONArray gscdMap = new JSONArray();
		JSONObject jsonObjectgh = new JSONObject();
		jsonObjectgh.put("name", "工號");
		jsonObjectgh.put("value",salary.getStaffId());
		basicMap.add(jsonObjectgh);
		JSONObject jsonObjectxm = new JSONObject();
		jsonObjectxm.put("name", "姓名");
		jsonObjectxm.put("value",salary.getStaffName());
		basicMap.add(jsonObjectxm);
		JSONObject jsonObjectbm = new JSONObject();
		jsonObjectbm.put("name", "部門");
		jsonObjectbm.put("value",salary.getDept());
		basicMap.add(jsonObjectbm);
		JSONObject jsonObjectks = new JSONObject();
		jsonObjectks.put("name", "科室");
		jsonObjectks.put("value",salary.getClass_());
		basicMap.add(jsonObjectks);
		JSONObject jsonObjectnf = new JSONObject();
		jsonObjectnf.put("name", "年份");
		jsonObjectnf.put("value",salary.getYear());
		basicMap.add(jsonObjectnf);
		JSONObject jsonObjectyf = new JSONObject();
		jsonObjectyf.put("name", "月份");
		jsonObjectyf.put("value",salary.getMonth());
		basicMap.add(jsonObjectyf);

		basicInfo.put("category", "基本信息");
		basicInfo.put("id", "info");
		basicInfo.put("items", basicMap);
		result.add(basicInfo);
		
		return result;
	}

   接口用http形式提供:

jsonP格式接口實現


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

夏邑县| 土默特右旗| 西乌| 资源县| 定远县| 亳州市| 平江县| 阿克陶县| 余姚市| 镇江市| 千阳县| 突泉县| 西充县| 北宁市| 雷州市| 正宁县| 桐乡市| 桃源县| 东丽区| 建瓯市| 茂名市| 西安市| 巩留县| 抚顺市| 新建县| 洞头县| 上饶县| 鸡西市| 根河市| 彰化县| 云龙县| 湖南省| 辽中县| 镇巴县| 新乡市| 河曲县| 仁布县| 淮滨县| 吉隆县| 天台县| 田东县|