在我们做项目的过程中,有可能会遇到跨域请求,所以需要我们自己组装支持跨域请求的JSONP数据,而在4.1版本以后的SpringMVC中,为我们提供了一个AbstractJsonpResponseBodyAdvice的类用来支持jsonp的数据(SpringBoot接收解析web请求是依赖于SpringMVC实现的)。下面我们就看一下怎么用AbstractJsonpResponseBodyAdvice来支持跨域请求。

使用AbstractJsonpResponseBodyAdvice来支持跨域请求很简单,只需要继承这个类就可以了。具体代码如下:

package com.zkn.learnspringboot.config;import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.AbstractJsonpResponseBodyAdvice;/*** Created by wb-zhangkenan on 2016/12/1.*/
@ControllerAdvice(basePackages = "com.zkn.learnspringboot.web.controller")
public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice{public JsonpAdvice() {super("callback","jsonp");}
}

下面我们写个类来测试一下:

package com.zkn.learnspringboot.web.controller;import com.zkn.learnspringboot.domain.PersonDomain;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** Created by wb-zhangkenan on 2016/12/1.*/
@RestController
@RequestMapping("/jsonp")
public class JsonpTestController {@Autowiredprivate PersonDomain personDomain;@RequestMapping(value = "/testJsonp",produces = MediaType.APPLICATION_JSON_VALUE)public PersonDomain testJsonp(){return personDomain;}
}

当我们发送请求为:http://localhost:8003/jsonp/testJsonp的时候,结果如下:


当我们发送的请求为:http://localhost:8003/jsonp/testJsonp?callback=callback的时候,结果如下所示:

看到区别了吗?当我们在请求参数中添加callback参数的时候,返回的数据就是jsonp的,当我们请求参数中不带callback的时候,返回的数据是json的。可以让我们方便的灵活运用。下面再奉上一个jsonp的完整案例。

前台页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title><script src="resources/js/jquery-2.1.4.min.js" type="text/javascript"></script>
</head>
<body>
<input type="button" value="测试jsonp请求" οnclick="testJsonp()" />
<script type="text/javascript">function testJsonp() {$.ajax({type:'get',url:'http://localhost:8003/jsonp/testJsonp',dataType:'jsonp',jsonp:"callback",success:function (data) {alert(data.userName+"  "+data.passWord);},error:function (err) {alert('出现错误了!!!');}});}
</script>
</body>
</html>

后台代码1:

package com.zkn.learnspringmvc.news.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;/*** Created by zkn on 2016/12/3.*/
@Controller
public class JsonpTestController {@RequestMapping("testJsonp")public String testJsonp(){return "jsonp";}
}

下面我们发送请求如下:http://localhost:8080/LearnSpringMvc/testJsonp

当我们点击测试jsopn请求这个按钮的时候,效果如下:

我们成功的实现了一个跨越的请求。更详细的请求信息如下:

SpringBoot多跨域请求的支持(JSONP)相关推荐

  1. 使用YQL解决跨域请求json转jsonp问题

    一.跨域报错 首先,是跨域请求的问题,jQuery默认不支持跨域请求,报错如下: index.html:1 XMLHttpRequest cannot load http://www.weather. ...

  2. springboot +element-axios跨域请求

    1.初始化element项目 1.1:vue init webpage '项目名称' 1.2:npm i element-ui -S 1.3:在main.js添加 import ElementUI f ...

  3. 跨域请求(使用jsonp实现跨域请求)百度地图api证逆地址解析获取周边信息(pois)

    新手程序员,新手博客,如果那里写的不好,还请大神们补充,指错 最近项目里面需要做一个电子围栏的功能,我这边做的就是需要把商户的地址的经纬度存进数据库,本来这些从百度地图API里面有Demo可以看,但是 ...

  4. SpringBoot允许跨域请求

    在前后端分离的架构中,允许跨域请求是一个很重要的设置.SpringBoot项目中允许跨域请求比较简单,只需要我们定义好配置类即可. 在com.example.csdn.config包里面创建CorsC ...

  5. SpringBoot 处理跨域请求

    一.背景 最开始项目计划的是通过Nginx进行转发,且配置了跨域请求.后来又改变了部署方式,所以得通过项目自身来进行一下跨域处理. 1)何为跨域? URL的一般格式: 协议 + 域名(子域名 + 主域 ...

  6. Js跨域请求jquery的jsonp方式

    JSONP: 由于同源策略,一般来说位于 server1.example.com 的网页与不是 server1.example.com 的服务器沟通,而 HTML 的 <script> 元 ...

  7. jsonp跨域原理_【网站技术解读①】Javascript实现跨域请求

    推荐一个读者做的不错的编程学习网站: 网站:潜安 域名:http://www.qianani.com 另外将会不定期推送近期网站用到的一些技术,讲一些核心原理,今天为第一篇 问题由来: 最近一直在优化 ...

  8. Jsonp 跨域请求实例

    Jsonp 跨域请求实例 关于jsonp的一个实例,其实自己也不是很了解,今天下午稍微研究了一下: 简单来说,jsonp就是为了两个不同网站之间数据传递而产生的,主要用于js脚本,因为浏览器本身是禁止 ...

  9. Web跨域请求及其解决方案

    目录 一.理论概述 1. 什么是跨域请求(Cross-domain Request) 2. 浏览器的同源策略(Same-origin Policy) 3. 存在的安全风险 4. CSRF攻击简介 二. ...

  10. 前端跨域请求get_HTTP--跨域真的有这么难吗

    前言 以前写前端小项目的时候就听说过跨域这个词,什么 JSONP啊,CORS啊.感觉很高级,但是无奈项目太小没机会用上.今天就写篇博客总结一下常用的跨域操作. 为什么要跨域 一般来说写项目的时候都是自 ...

最新文章

  1. Android与JS混编(js调用android相机扫描二维码)
  2. Early Z Culling
  3. SqlServer_Case_When用法
  4. 2022年美国大学生数学建模竞赛各题型常见参考代码汇总
  5. 「Apollo」Cyber RT 学习笔记
  6. php预处理查询数据库,php+mysqli使用预处理技术进行数据库查询的方法
  7. iOS-应用生命周期
  8. 330 div+css Experience
  9. Java IO之File类详解
  10. python dtype o_python – 为什么dtype = str的空数据框填充“n”?
  11. CSS:布局——伸缩布局flex
  12. 关于VS编译的程序内存分配只能用1.5~2G上限的优化方案
  13. 前端计算机英语单词,解决文件命名,变量命名头皮发麻,单词超多1700个前端专属单词,css常用命名单词【起名字太烦了全背下来内卷吧小伙伴大前端时代来临了】
  14. WPS2005中实现多行合一(转)
  15. android 蒙版图片带拖动_使用jQuery draggable在div剪切蒙版中拖动缩放图像?
  16. android系统密码设置功能,手机锁屏设置!安卓手机锁屏密码设置技巧?
  17. hdu 4438 Hunters
  18. 计算机启动后没有桌面,电脑开机后桌面上什么都没有是为什么,怎么办
  19. 原生JS购物车---cookie应用
  20. Spring Security实现用户名密码验证的原理

热门文章

  1. Python学习笔记008_类_对象_继承_组合_类相关的BIF
  2. BZOJ2151 种树
  3. 【ARM】2410裸机系列-中断处理
  4. oracle桌面工具plsql连接本地远程数据库
  5. CF1139D Steps to One
  6. Myeclipse2014中,新建部署Maven项目
  7. CentOS 5.5编译安装lnmp
  8. php设计模式 — 单例模式(singleton)
  9. Ubuntu下Android NDK环境搭建笔记
  10. mysql 优化 (1)