手机版

jsonp跨域请求详解

时间:2021-09-04 来源:互联网 编辑:宝哥软件园 浏览:

前端时间因为太忙,一直没有处理跨域这个事情,今天抽了一个小时轻松解决,突然发现上个月又写了很多重复代码。因为现在公司项目分为多个工程,前后端完全分离,管理工程做所有业务逻辑处理,应用程序,微信两个前置工程通过httpClient去调用经营工程的安静的接口,而我就是负责微信这个工程,久而久之发现真的重复了很多控制器层的代码,愈发激活了这个所有接口支持浏览器跨域请求的封装。话不多讲,见核心代码

1.定义一个类,继承映射杰克逊2 httpmessageconverter,重写writeInternal方法,方法里简单判断一下是否带有回收参数,没有直接返回数据,有的话将数据用回收参数的值括号包裹起来返回。

导入Java。io。ioexception导入javax。servlet。http。HttpServletrequest导入组织。阿帕奇。公地。io。借条;导入组织。阿帕奇。公地。郎3。stringutils导入组织。弹簧框架。http。http poutopmessage;导入组织。弹簧框架。http。转换器。httpmesagentwritableexception导入组织。弹簧框架。http。转换器。JSON。映射Jackson 2 httpmessageconverter导入组织。弹簧框架。网络。语境。请求。请求上下文持有者;导入组织。弹簧框架。网络。语境。请求。servlet请求属性;进口。com。fasterxml。杰克逊。核心。jsonencoding进口。com。fasterxml。杰克逊。核心。jsonprocessingexception公共类callbackmapping Jackson 2 httpmessageconverter扩展了mapping Jackson 2 httpmessageconverter {//做jsonp的支持的标识,在请求参数中加该参数私有字符串回调名称;@覆盖受保护的内部空写(对象对象,HttpOutputMessage outputMessage)引发IOException,httpmesagentwritableexception {//从threadLocal中获取当前的请求对象HttpServletRequest请求=((ServletRequestAttributes)请求上下文持有者.currentRequestAttributes()).getRequest();字符串回调参数=请求。getparameter(回调名);if(stringutils。isempty(回调参数)){//没有找到回收参数,直接返回json数据super.writeInternal(对象,OutPut消息);} else { JsonEncoding encoding=getJsonEncoding(output message。getheaders().getContentType());尝试{字符串结果=回调参数'(' super。getobjectmapper().writeValueAsString(对象)');';IOUtils.write(result,outputMessage.getBody(),编码。getjavaname());} catch(JSonprocessingException ex){ 0抛出新的HttpMessageNotWritableException(“”无法写入JSON: ' ex.getMessage(),ex);} } }公共字符串getCallbackName(){ 0返回callback name } public void setcallback name(String callback name){ this。callbackName=callbackName}}2.定义Java bean,注意修改班级扫描路径,这样每次请求过来都会调起映射杰克逊2HttpMessageConverter类里的riteInternal这个方法,如果请求带上了回收参数,则将以回调值("数据")格式的数据返回给前端。

!-定义注解驱动-MVC :注释驱动的MVC :消息-转换器寄存器-默认值='true' bean类=' XXX。XXX。XXX。' callbackmapping Jackson 2 httpmessageconverter '属性名称='callbackName '值='回调'/bean/MVC :消息-转换器/MVC :注释驱动3。前端通过jquery封装的创建交互式、快速动态网页应用的网页开发技术方式调用,这里做了一些代码节省,关键代码已红色标出

脚本类型=' text/JavaScript ' var feedback={ init : function(){ var self=feedback;自我。bind();},test:函数(数据){ console.log('测试jsonp '、data) }、bind:函数(){ var self=feedback var par={ };标准杆。回调='反馈。测试';$.Ajax({ URL : ' http://manage。达能。com/rest/open/query invite list '、data: par、dataType:'jsonp '、jsonp:'callback '、time out :3000 });} }反馈。init();/script4 .浏览器打印原木

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:jsonp跨域请求详解是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。