文档章节

Spring MVC处理JSONP跨域

wx追梦
 wx追梦
发布于 2017/08/22 11:59
字数 428
阅读 15
收藏 1

本篇博文主要讲解,什么是jsonp,以及Spring MVC如何优雅的处理Jsonp跨域(此处讲解Jackson2,如需处理其它json转换器,我可另外开一篇博客讲解)。 Spring MVC提供了ResponseBodyAdvice<T>这个接口,处理@ResponseBody注解标记的Handler的返回值,得以支持我们可以优雅的处理jsonp跨域。

public interface ResponseBodyAdvice<T> {

	/**
	 * Whether this component supports the given controller method return type
	 * and the selected {@code HttpMessageConverter} type.
	 * @param returnType the return type
	 * @param converterType the selected converter type
	 * @return {@code true} if {@link #beforeBodyWrite} should be invoked, {@code false} otherwise
	 */
	boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType);

	/**
	 * Invoked after an {@code HttpMessageConverter} is selected and just before
	 * its write method is invoked.
	 * @param body the body to be written
	 * @param returnType the return type of the controller method
	 * @param selectedContentType the content type selected through content negotiation
	 * @param selectedConverterType the converter type selected to write to the response
	 * @param request the current request
	 * @param response the current response
	 * @return the body that was passed in or a modified, possibly new instance
	 */
	T beforeBodyWrite(T body, MethodParameter returnType, MediaType selectedContentType,
			Class<? extends HttpMessageConverter<?>> selectedConverterType,
			ServerHttpRequest request, ServerHttpResponse response);

}

SpringMVC自带提供了对Jackson进行jsonp转换的抽象类,我们只需要编写一个实现类继承该抽象类,即可获得对jsonp的支持。我们可以看一下类之间的继承关系。

输入图片说明

除JsonPAdvice是我自己编写的外,其余都是SpringMVC提供的,下面是JsonPAdvice的具体内容:

//标注我们需要通知的package.
@ControllerAdvice("com.letter.controller")
public class JsonPAdvice extends AbstractJsonpResponseBodyAdvice{

	public JsonPAdvice() {
		//此处只需要传入我们进行jsonp回调是的参数名称即可,
		//可传多个,一般jq的ajax采用的是callback名称.
		super("jsonp","callback");
	}
}

这样就成功处理了jsonp跨域请求,如果请求没有跨域也不会添加对应的回调信息在json数据里面。 跨域情况: 跨域情况:

© 著作权归作者所有

wx追梦
粉丝 0
博文 2
码字总数 635
作品 0
成都
程序员
私信 提问
搞定所有的跨域请求问题 : jsonp & CORS

原文出处:JavaDoop 网上各种跨域教程,各种实践,各种问答,除了简单的 jsonp 以外,很多说 CORS 的都是行不通的,老是缺那么一两个关键的配置。本文只想解决问题,所有的代码经过亲自实践。...

JavaDoop
2017/11/30
0
0
Spring Boot学习资源

Spring Boot 入门 http://blog.csdn.net/isea533/article/details/50278205 ---------------------------------------------------------- Spring Boot 静态资源处理 http://blog.csdn.net/c......

IamOkay
2017/02/17
445
0
Spring @CrossOrigin 注解原理

现实开发中,我们难免遇到跨域问题,以前笔者只知道jsonp这种解决方式,后面听说spring只要加入@CrossOrigin即可解决跨域问题。本着好奇的心里,笔者看了下@CrossOrigin 作用原理,写下这篇博...

暗中观察
03/13
661
0
Web Service 那点事儿(4)—— 使用 CXF 开发 REST 服务

现在您已经学会了如何使用 CXF 开发基于 SOAP 的 Web 服务,也领略了 Spring + CXF 这个强大的组合,如果您错过了这精彩的一幕,请回头看看这篇吧: [Web Service 那点事儿(2) —— 使用 ...

黄勇
2014/07/23
22K
43
Spring MVC通过CROS协议解决跨域问题

现在接手学校网络中心的一个项目,根据团队成员的实际情况以及开发需要,老师希望做到前后端完全分离。后台使用java提供restful API 作为核心,前台无论PC或者移动端可以共用一个核心。前期解...

vstaryw
2016/07/18
149
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
6
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
4
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
7
0
从零基础到拿到网易Java实习offer,我做对了哪些事

作为一个非科班小白,我在读研期间基本是自学Java,从一开始几乎零基础,只有一点点数据结构和Java方面的基础,到最终获得网易游戏的Java实习offer,我大概用了半年左右的时间。本文将会讲到...

Java技术江湖
昨天
7
0
程序性能checklist

程序性能checklist

Moks角木
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部