博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jsonP格式接口实现
阅读量:6933 次
发布时间:2019-06-27

本文共 4605 字,大约阅读时间需要 15 分钟。

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

  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配置:

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

jsonp.jsp

1
2
3
4
5
6
7
8
<%@ 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+")");
%>

方法实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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转换:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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形式提供:

     本文转自 gaochaojs 51CTO博客,原文链接:http://blog.51cto.com/jncumter/1750964,如需转载请自行联系原作者
你可能感兴趣的文章
浅谈Redis和Hbase
查看>>
python基础——logging、OS、sys、random、string模块(0424)
查看>>
python 笔记 之 类的继承与重写
查看>>
Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)
查看>>
NodeMCU快速上云集锦
查看>>
利用T-SQL语句快速清理ZBLOG程序的SQL SERVER2012数据库内容
查看>>
《美国如何培养核心素养》读后感作文1900字
查看>>
String 中的hashCode方法
查看>>
用 Python 实现打飞机,让子弹飞吧!
查看>>
Spring Cloud云服务架构 - common-service 项目构建过程
查看>>
RESTful
查看>>
Python中的赋值、引用和深浅拷贝
查看>>
上拉加载下拉刷新了解下
查看>>
教你怎么样在 Java8 中优雅的避开空指针异常
查看>>
函数嵌套调用性能好还是函数分开写性能好?
查看>>
【翻译】CodeMix使用的语言和框架(二):PHP
查看>>
Java 内部类
查看>>
python项目实战:20行代码画一朵好看又有趣的小花花
查看>>
jsp 页面中El表达式失效处理
查看>>
在django中按照时间范围查询数据库
查看>>