详解SpringBoot多跨域请求的支持(JSONP)

 更新时间:2017年04月11日 09:36:11   作者:木叶之荣  
跨域是很多项目需要遇到的文章,本篇文章主要介绍了详解SpringBoot多跨域请求的支持(JSONP),具有一定的参考价值,有兴趣的可以了解一下

在我们做项目的过程中,有可能会遇到跨域请求,所以需要我们自己组装支持跨域请求的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 { 
  @Autowired 
  private 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请求" onclick="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请求这个按钮的时候,效果如下:

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Spring Boot中自定义注解结合AOP实现主备库切换问题

    Spring Boot中自定义注解结合AOP实现主备库切换问题

    这篇文章主要介绍了Spring Boot中自定义注解+AOP实现主备库切换的相关知识,本篇文章的场景是做调度中心和监控中心时的需求,后端使用TDDL实现分表分库,需要的朋友可以参考下
    2019-08-08
  • Java集合系列之LinkedHashMap源码分析

    Java集合系列之LinkedHashMap源码分析

    这篇文章主要为大家详细介绍了Java集合系列之LinkedHashMap源码分析,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • Java8深入学习系列(一)lambda表达式介绍

    Java8深入学习系列(一)lambda表达式介绍

    Java8最值得学习的特性就是Lambda表达式和Stream API,所以我们学习java8的第一课就是学习lambda表达式,下面这篇文章主要给大家介绍了关于Java8学习之lambda的相关资料,文中介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-08-08
  • ssm mybatis如何配置多个mapper目录

    ssm mybatis如何配置多个mapper目录

    这篇文章主要介绍了ssm mybatis如何配置多个mapper目录,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教。
    2022-01-01
  • Springboot+WebSocket+Netty实现在线聊天/群聊系统

    Springboot+WebSocket+Netty实现在线聊天/群聊系统

    这篇文章主要实现在好友添加、建群、聊天对话、群聊功能,使用Java作为后端语言进行支持,界面友好,开发简单,文章中有详细的代码示例供大家参考,需要的朋友可以参考下
    2023-08-08
  • Resilience4J通过yml设置circuitBreaker的方法

    Resilience4J通过yml设置circuitBreaker的方法

    Resilience4j是一个轻量级、易于使用的容错库,其灵感来自Netflix Hystrix,但专为Java 8和函数式编程设计,这篇文章主要介绍了Resilience4J通过yml设置circuitBreaker的方法,需要的朋友可以参考下
    2022-10-10
  • idea查看java文件的全部接口的操作方法

    idea查看java文件的全部接口的操作方法

    在Java项目开发中,快速查看和理解接口至关重要,通过IntelliJ IDEA,开发人员可以高效地浏览Java文件中的所有接口信息,本文介绍了在IDEA中实现查看Java文件全部接口的方法,感兴趣的朋友一起看看吧
    2024-10-10
  • SpringFox实现自动生成RESTful API文档

    SpringFox实现自动生成RESTful API文档

    在开发 RESTful API 时,编写 API 文档是一个重要的任务,这篇文章为大家介绍了如何使用 SpringFox 自动生成 RESTful API 文档,并提供示例代码,需要的可以参考一下
    2023-06-06
  • Java如何在沙箱环境中测试支付宝支付接口

    Java如何在沙箱环境中测试支付宝支付接口

    这篇文章主要介绍了Java如何在沙箱环境中测试支付宝支付接口,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • 详解Java ReentrantReadWriteLock读写锁的原理与实现

    详解Java ReentrantReadWriteLock读写锁的原理与实现

    ReentrantReadWriteLock读写锁是使用AQS的集大成者,用了独占模式和共享模式。本文和大家一起理解下ReentrantReadWriteLock读写锁的实现原理,需要的可以了解一下
    2022-10-10

最新评论