Jsonp跨域问题-callback无法生效

Jsonp跨域问题-callback无法生效

1 背景

   问题:最近在参考网红视频写代码时遇到JS跨域问题,在照着把视频里面的代码复制一把之后竟然跨域问题没解决,callback的方法名无法在json的头部增加。debug日志显示已经取到后台数据并且返回时候已经调用了配置好的CallbackMappingJackson2HttpMessageConverter类,但奇怪的是debug不进入重写的writeInternal方法中的断点。

2 代码部分

   Jsonp跨域的原理就不用解释,网上一大波,直接贴一个网友的链接,并附上对应转换json的代码.

@Override
	protected void writeInternal(Object object, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
		String callbackParam = request.getParameter(callbackName);
		if(StringUtils.isEmpty(callbackParam)){
			super.writeInternal(object, outputMessage);
		}else{
			JsonEncoding encoding = getJsonEncoding(outputMessage.getHeaders().getContentType());
			try {
				String result =callbackParam+"("+super.getObjectMapper().writeValueAsString(object)+");";
				IOUtils.write(result, outputMessage.getBody(),encoding.getJavaName());
			}
			catch (JsonProcessingException ex) {
				throw new HttpMessageNotWritableException("Could not write JSON: " + ex.getMessage(), ex);
			}
		}
	}
参考连接:https://blog.csdn.net/qq_1017097573/article/details/68924226

3 问题原因

3.1 spring-web包版本问题

    在参考链接的评论部分解释的较为清楚:即spring-web包在某个版本之后,继承的父类源码中有两个同名的writeInternal重载函数,一个方法包含两个参数,另外一个方法是三个参数。当Controller返回数据的时候走到了三个参数的writeInternal函数中,所以相当于还是没有对json进行再封装

protected void writeInternal(Object object, Type type, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {

}

   解决办法:把三个参数的writeInternal也重写一把,当然可以在三个参数的writeInternal去调用两个参数的writeInternal

3.2 Maven打包

    在按照3.1把spring-web降级之后,发现仍然还是无法解决。最后发现需要重新对依赖的common包和parent包进行install,完美解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值