JSON

jsonP格式接口实现

字号+ 作者:H5之家 来源:H5之家 2017-08-01 11:00 我要评论( )

jsonP格式接口实现,单位开发了一个app系统,app外包,服务由自开发的薪资查询系统提供。app与后端交互采用jsonp解决跨域问题。 JSONP的实现,需要加上一个callba

正文

单位开发了一个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上,:8090/api/testcallback=jsonpCallback

前台javascript中定义jsonpCallback函数,此函数必须定义在window下,也就是全局的函数,否则找不到。

后台获取请求的callback参数值jsonpCallback,返回字符串"jsonpCallback(result)",result为返回结果。

请求返回的是script tag,首先会调用jsonpCallback函数,不管是否找到该函数,都会调用success函数。

如果没有定义jsonp和jsonpCallback,jsonp默认为"callback",jsonpCallback会是Jquery自动生成的函数名。


可以参考例子。

代码如下,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().getPassword(); 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形式提供:


 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • jquery ajax json 综合应用实例

    jquery ajax json 综合应用实例

    2017-08-01 14:07

  • java:(json,ajax,path)

    java:(json,ajax,path)

    2017-07-31 17:02

  • 服务器端的 JSON应用教程

    服务器端的 JSON应用教程

    2017-07-31 17:00

  • Json字符串转Java Bean

    Json字符串转Java Bean

    2017-07-31 16:03

网友点评