前言

  • 若依(ruoyi): v4.3
  • springboot 2.1.1.RELEASE
  • spring 5.1.3.RELEASE
  • 360极速浏览器 12.0.1476.0 (正式版本) (32 位)
  • jquery 3.5.0

简单来说,@RestController 接口支持 JSONP 需要对返回结果用callback包裹。

需求为:

  • jsonpCallback 固定为 callback
  • JSONP 开关参数为 jsonp。比如:http://localhost:8085/api/sample/form/get1?jsonp=1输出 callback({"code":0,"msg":"OK"});http://localhost:8085/api/sample/form/get1 输出 {"code":0,"msg":"OK"}

操作步骤

  • 编写 MappingJackson2HttpMessageConverterSupportJsonp类,且继承 MappingJackson2HttpMessageConverter 类。
  • MappingJackson2HttpMessageConverterSupportJsonp类中覆盖 writePrefix(在输出时,添加前缀) 和 writeSuffix(在输出时,添加后缀)。
  • 使用 MappingJackson2HttpMessageConverterSupportJsonp Bean 替换 MappingJackson2HttpMessageConverter Bean。

代码如下:

@Configuration
public class JsonpSupportConfig {@Beanpublic MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(ObjectMapper objectMapper) {return new MappingJackson2HttpMessageConverterSupportJsonp(objectMapper);}private static class MappingJackson2HttpMessageConverterSupportJsonp extends MappingJackson2HttpMessageConverter {private final String PARAM_JSONP = "jsonp";public MappingJackson2HttpMessageConverterSupportJsonp(ObjectMapper objectMapper) {super(objectMapper);}@Overrideprotected void writePrefix(JsonGenerator generator, Object object) throws IOException {if (this.isJsonp(object)) {generator.writeRaw("callback(");}}@Overrideprotected void writeSuffix(JsonGenerator generator, Object object) throws IOException {if (this.isJsonp(object)) {generator.writeRaw(")");}}private boolean isJsonp(Object object) {RequestAttributes attributes = RequestContextHolder.getRequestAttributes();ServletRequestAttributes servletAttributes = (ServletRequestAttributes) attributes;HttpServletRequest request = servletAttributes.getRequest();String jsonpStr = request.getParameter(PARAM_JSONP);if ("0".equals(jsonpStr)) { return false; }if ("1".equals(jsonpStr)) { return true; }return Boolean.valueOf(jsonpStr);}}
}

效果图:

spring boot 对 jsonp 的支持问题

spring 5.1 之前可以使用 AbstractJsonpResponseBodyAdvice 支持JSONP,spring 5.1之后将其移除了。

AbstractJsonpResponseBodyAdvice was deprecated starting from Spring 5.0.7 and 4.3.18 and in version 5.1 it is completely removed.

因为随着时间的推移,浏览器都支持了 CROS 。CROS 要比 JSONP 好。工作中,逐渐的转投 CROS。

参考

https://blog.csdn.net/sayyy/article/details/108399070
https://stackoverflow.com/questions/52845927/how-to-handle-jsonp-spring-framework-5-1

【springboot】【若依(ruoyi)】@RestController 接口支持 JSONP相关推荐

  1. 纯 js 实现跨域接口调用 jsonp

    开发「bufpay.com 个人即时到账收款平台」的时候,支付页面需要 poll轮询 查询订单状态. bufpay 支付接口如下: 接口地址:https://bufpay.com/api/pay/ai ...

  2. Spring MVC 4.1 支持jsonp

    2019独角兽企业重金招聘Python工程师标准>>> 使用ResponseBodyAdvice支持jsonp ResponseBodyAdvice是一个接口,接口描述, packa ...

  3. springboot+cxf框架开发SOAP接口

    什么是SOAP SOAP是 simple object access protocol(简单对象访问协议)的缩写.这个协议是用http的post请求实现的,跟一般的post请求不同的是,在请求的hea ...

  4. SpringBoot实现文件上传接口

    作者平台: | CSDN:blog.csdn.net/qq_41153943 | 掘金:juejin.cn/user/651387- | 知乎:www.zhihu.com/people/1024- | ...

  5. SpringBoot开发Restful风格的接口实现CRUD功能

    一.前言 我们都知道SpringBoot的出现使得在开发web项目的时候变得更加方便.快捷.之前写过一篇文章是如何快速搭建一个springboot项目:SpringBoot入门:使用IDEA和Ecli ...

  6. springboot + 若依 ruoyi + easypoi excel的导入导出(带图片)

    springboot + 若依 ruoyi + easypoi excel的导入导出(带图片) 一.官方文档 gitee地址 官方文档 二.快速开始 1.导入 引入依赖 <dependency& ...

  7. IDEA中进行SpringBoot整合spring-ws开发webservice接口后期要修改xsd文件流程

    场景 SpringBoot整合spring-ws开发webservice接口(全流程详细教程) 参照: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/articl ...

  8. mfc工程中添加com接口支持

    在普通的mfc工程中常常需要添加com接口支持.最典型的应用就是使用 com中的连接点机制时,需要在客户端实现事件接受器.简单说来,就是要实现在com服务器端声明的事件接口.这个接口由server端暴 ...

  9. Springboot使用FastJson后,接口返回中文乱码的问题解决。

    Springboot使用FastJson后,接口返回中文乱码的问题解决. 参考文章: (1)Springboot使用FastJson后,接口返回中文乱码的问题解决. (2)https://www.cn ...

最新文章

  1. nginx和squid配合搭建的web服务器前端系统
  2. 迭代器接口IteratorAggregate 与类 ArrayIterator(转)
  3. 《算法导论》读书笔记(七)
  4. 计算机机房坏境设施演练,计算机机房环境设施应急演练方案
  5. 脚本命令_SAP HANA数据库备份命令脚本
  6. android中设置lmargin简书,超详细React Native实现微信好友/朋友圈分享功能-Android/iOS双平台通用...
  7. Win11系统怎么取消登录密码 Win11取消登录密码图文教程
  8. 全球最厉害的14位程序员!你知道有哪几位?
  9. MACOS上install_name_tool有时无法改变rpath
  10. 模拟退火算法解决车间工作台工作指派问题
  11. Linux解决Device eth0 does not seem to be present,delaying initialization问题
  12. Javascript鼠标悬停显示子菜单的大型分类菜单
  13. win10如何设置计算机网络访问,win10系统设置允许或拒绝从网络中访问本地电脑的操作方法...
  14. 知乎张瑞: 浅析机器学习理论与实践 | 业界对话
  15. Java基本语法笔记
  16. android中数据库sql语句删除指定日期或之前之后的数据
  17. 台式计算机硬盘能扩大吗,电脑怎么增加磁盘内存
  18. linux安全基线检查内容
  19. 要多久人工智能的梦想才能照进现实
  20. 如来问:“你们带U盘了么”

热门文章

  1. 4G+宽带高歌猛进:移动双线虐杀联通
  2. [转]emailjs-smtp-client
  3. NOR flash and NAND flash
  4. 多线程相互排斥--mutex(二)
  5. MDT2012部署问题,MDT中的驱动是如何工作的
  6. 英文seo外链资源整合,怎么样找国外博客资源?
  7. 交换机接口trunk的配置和vlan的划分
  8. WebBrowser(IE) 与 JS 相互调用
  9. 解决VS2013调试ASP.NET中无法调试的问题:当前不会命中断点。在 XXXX.dll 中找到了 XXX.cs 的副本,但是当前源代码与 XXXX.dll 中内置的版本不同。...
  10. Flex与.NET互操作(五):使用FileReference+HttpHandler实现文件上传/下载