详解 java 中 Spring jsonp 跨域请求的实例
这里有新鲜出炉的 Java 并发编程示例, 程序狗速度看过来!
Java 程序设计语言
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
这篇文章主要介绍了详解 java 中 Spring jsonp 跨域请求的实例的相关资料, jsonp 可用于解决主流浏览器的跨域数据访问的问题, 需要的朋友可以参考下
详解 java 中 Spring jsonp 跨域请求的实例
jsonp 介绍
JSONP(JSON with Padding) 是 JSON 的一种使用模式, 可用于解决主流浏览器的跨域数据访问的问题由于同源策略, 一般来说位于 server1.example.com 的网页无法与不是 server1.example.com 的服务器沟通, 而 html 的 < script> 元素是一个例外利用 <script> 元素的这个开放策略, 网页可以得到从其他来源动态产生的 JSON 资料, 而这种使用模式就是所谓的 JSONP 用 JSONP 抓到的资料并不是 JSON, 而是任意的 JavaScript, 用 JavaScript 直译器执行而不是用 JSON 解析器解
0 引入 jar 包
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-jersey</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
其他介绍就不多说了, 开始上手吧
1 继承 AbstractJsonpResponseBodyAdvice 类 JsonpAdvice, 并加上 @RestControllerAdvice 注解
- /*RestControllerAdvice 的值指定拦截的包名 */
- @RestControllerAdvice("com.ctrl")
- public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {
- public JsonpAdvice() {
- super("callback", "jsonp");
- /*callback 是 url 请求拦截的参数名, 如果拦截成功会将返回数据传入函数执行回调函数 */
- }
- }
2 创建 ctrl 类
- package com.ctrl;
- import java.util.HashMap;
- import java.util.Map;
- import javax.servlet.http.HttpServletRequest;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;@RestController public class HelloCtrl {@RequestMapping("/hello") public Map < String,
- Object > hello(HttpServletRequest request) {
- Map < String,
- Object > data = new HashMap < String,
- Object > ();
- data.put("suc", true);
- data.put("msg", "save suc");
- data.put("param", request.getParameter("a") + "==" + request.getParameter("d"));
- return data;
- }
- }
4 创建启动 app 类:
- package com.services;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- @SpringBootApplication(scanBasePackages="com")
- public class App {
- public static void main(String[] args) {
- SpringApplication.run(App.class, args);
- }
- }
5 前端调用:
- <!DOCTYPE html>
- <html>
- <head>
- <title>jquery 跨域实例 </title>
- <!-- jquery 版本可以不是 3.2.1 版本的 -->
- <script type="text/javascript" src="jquery-3.2.1.js"></script>
- <script type="text/javascript">
- $(function() {
- /* 这是快捷调用, callback 是 advice 中设置的,? 是保留参数,
- jquery 会替换掉这个问号 url 可是不同于请求地址的任何 url*/
- $.getJSON("/hello?callback=?", function(data) {
- //$("#showcontent").text("Result:" + data)
- });
- /* 使用 ajax 方法调用 */
- $.ajax({
- type : "get",
- async : false,
- url : "/hello",
- dataType : "jsonp",// 数据类型为 jsonp
- data:{a:"b",d:"c"},
- type:"POST",
- jsonp : "callback",// 服务端用于接收 callback 调用的 function 名的参数
- success : function(data) {
- $("#showcontent").text("Result:" + data.suc + "requestParam:" + data.param )
- },
- error : function() {
- alert('fail');
- }
- });
- })
- </script>
- </head>
- <body>
- <div id="showcontent"></div>
- </body>
- </html>
服务器端也不一定要用 spring 任何技术都可以, 只要返回格式是下面的格式就可以, 调用一个哈桑农户, 出传入一个 json 或者是字符串就可以了
/**/test01({"suc":true,"msg":"save suc"});
直接访问返回数据:
以上使用关于 java 中 Spring jsonp 跨域请求的实例详解, 如有疑问请留言或者到本站社区交流讨论, 感谢阅读, 希望能帮助到大家, 谢谢大家对本站的支持!
来源: http://www.phperz.com/article/18/0117/362750.html