Vue-Resourse发送请求后台接收参数乱码问题

前台和后台乱码的问题可以说是家常便饭,一般两端定义好使用同一个字符集是不会有问题,但是昨天遇见一个小坑,分享一下。


先说环境吧,后台tomcat+spring,标准的SSM框架。tomcat配置文件和我知道能设置编码的地方都设置成UTF-8。之前使用jQuery请求正常,无乱码现象,因为最近使用vue,jQuery各种意义上的很多功能都使用不上,所以找到了vue-resourse,最强大的是这个还带有拦截器功能,嘛,可以在每次请求前后做一些操作,用处诸君可以随便想象。


然后问题来了,一切都那么美好,使用简单,功能强大,可是,可是他居然中文乱码,这就很奔溃了,网上找了大量的教程,官方文档也努力找,可是依然没找到相关问题。so,只能自食其力咯。

乱码嘛,一开始想的当然是服务器的编码,确认再三,应该是没问题的,之前jQuery请求都是正常的,那好么,观察jQuery和vue-resourse发送的请求有何不同,嘛,其实也就content-type后面多了一个charset:utf-8。很简单,我立马想到了拦截器,每次请求前给request设置个请求头,大概是这样写的。

Vue.http.interceptors.push((request,next)=>{

    request.headers.set('Content-Type','application/x-www-form-urlencoded; charset=UTF-8')

    next((response)=>{

        return  response

    })

})

可以,很简单。嗯,看起来应该就可以了,可是试一下发现,这个Content-Type怎么完全没变啊,然后又是一阵折腾,比如设置其他请求头都有效,可是Content-type却无效,嗯,继续看文档,发现Vue.http.options.emulateJSON=true这一句,有个emulateJSON属性,准确意思没弄懂干嘛的,反正如果设置成false后台连参数都接不到了,全都是null。


说了这么多发现好多废话,嗯,好吧。直接说最后解决办法嘛,嗯,vue-resourse嘛,毕竟比较简单,问题也很明显了,就是设置了emulateJSON属性他会自动设置Content-Type请求头,而且比他给的api调用更靠后,so,灵机一动去他的js文件里看看咯。

找到引用js的位置,我的是这样的

Vue-Resourse发送请求后台接收参数乱码问题_第1张图片

找到这些js文件,打开搜索application/x-www-form-urlencoded,然后手动再后面加上;charset:utf-8

嗯。暂时OK。不知道将来打包出来会不会有其他问题。

你可能感兴趣的:(Vue-Resourse发送请求后台接收参数乱码问题)