Json   发布时间:2022-04-22  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了jsonP格式接口实现大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

单位开发了一个app系统,app外包,服务由自开发的薪资查询系统提供。app与后端交互采用jsonp解决跨域问题。

JSONP的实现,需要加上一个callBACk,JSONP和普通JSON的区别在于普通JSON,返回时

out.write("@R_450_9111@:'Xie Feng'}");

而jsonp的返回则是

out.write("callBACk(@R_450_9111@:'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自动生成函数名。

  • @H_772_44@


    可以参例子

    代码如下,struts配置:

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

    jsonp.jsp

    <%@pagelanguage="java"contentType="text/html;charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%
    
    StringjsoncallBACk=request.getParameter("callBACk");
    StringjsonResult=(String)request.getAttribute("salaryResult");
    out.println("callBACk("+jsonResult+")");
    %>

    方法实现

    	publicStringquerySalaryByKeyForApp(){
    		try{
    			SalUserEntitysalUserQuery=newSalUserEntity();
    			if(salaryVo==null||salaryVo.getSalaryEntity()==null){
    				salaryResult="{errorMsg:错误}";
    				returnsuccesS;
    			}
    			StringstaffId=salaryVo.getSalaryEntity().getStaffId();
    			Stringyear=salaryVo.getSalaryEntity().getYear();
    			Stringmonth=salaryVo.getSalaryEntity().getMonth();
    			Stringpassword=salaryVo.getSalaryEntity().@R_502_1392@word();
    			if(StringUtils.isEmpty(staffId)||StringUtils.isEmpty(year)||StringUtils.isEmpty(month)
    					||StringUtils.isEmpty(password)){
    				salaryResult="{errorMsg:错误}";
    				returnsuccesS;
    			}
    			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){
    					thrownewSalaryException("您的薪资数据未录入,新联系HR!");
    				}
    				List<Map<String,Object>>valueMap=entity2ListOfMap(entities.get(0));
    				
    				
    				JSONArrayjsonObject=JSONArray.fromObject(valueMap);
    				
    				salaryResult=jsonObject.toString();
    			//	jsonObject.accumulate("jsonObject",entities.get(0));
    			//	salaryVo.setSalaryEntity(entities.get(0));
    				returnsuccesS;
    			}else{
    				salaryResult="{errorMsg:错误}";
    				returnsuccesS;
    			}
    		}catch(ExceptionE){
    			salaryResult="{errorMsg:错误}";
    			returnsuccesS;
    		}
    		//returnERROR;
    	}

    json转换:

    	privateJSONArrayentity2ListOfMap(SalaryEntitysalary){
    		if(salary==null){
    			salary=newSalaryEntity();
    			returnentity2ListOfMap(salary);
    		}
    		JSONArrayresult=newJSONArray();
    		JSONObjectbasicInfo=newJSONObject();//基本信息
    		JSONObjectwageInfo=newJSONObject();//应发工资
    		JSONObjectbuckleInfo=newJSONObject();//实扣工资
    		JSONObjectrealInfo=newJSONObject();//实发工资
    		JSONObjectgscdInfo=newJSONObject();//公司承担
    		
    		JSONArraybasicMap=newJSONArray();
    		JSONArraywageMap=newJSONArray();
    		JSONArraybuckleMap=newJSONArray();
    		JSONArrayrealMap=newJSONArray();
    		JSONArraygscdMap=newJSONArray();
    		JSONObjectjsonObjectgh=newJSONObject();
    		jsonObjectgh.put("name","工号");
    		jsonObjectgh.put("value",salary.getStaffId());
    		basicMap.add(jsonObjectgh);
    		JSONObjectjsonObjectxm=newJSONObject();
    		jsonObjectxm.put("name","姓名");
    		jsonObjectxm.put("value",salary.getStaffName());
    		basicMap.add(jsonObjectxm);
    		JSONObjectjsonObjectbm=newJSONObject();
    		jsonObjectbm.put("name","部门");
    		jsonObjectbm.put("value",salary.getDept());
    		basicMap.add(jsonObjectbm);
    		JSONObjectjsonObjectks=newJSONObject();
    		jsonObjectks.put("name","科室");
    		jsonObjectks.put("value",salary.getClass_());
    		basicMap.add(jsonObjectks);
    		JSONObjectjsonObjectnf=newJSONObject();
    		jsonObjectnf.put("name","年份");
    		jsonObjectnf.put("value",salary.getYear());
    		basicMap.add(jsonObjectnf);
    		JSONObjectjsonObjectyf=newJSONObject();
    		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);
    		
    		returnresult;
    	}

    接口用http形式提供:

    jsonP格式接口实现

    大佬总结

    以上是大佬教程为你收集整理的jsonP格式接口实现全部内容,希望文章能够帮你解决jsonP格式接口实现所遇到的程序开发问题。

    如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

    本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
    如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。