ajax提交 返回中文乱码问题
接口返回数据相关
使用@ResponseBody后返回NUll
使用@RequestMapping返回中文乱码
原因分析:(网上基本都是一致的答案)
首先: 确定的是(经过多次测试的结果)只有当返回值是 String时才会出现中文乱码,而当返回值是Map<String, Object>或者是其它类型时,并没有中文乱码的出现.
- public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");
尝试方法一: 在配置文件中的mvc:annotation-driven中添加如下代码
- <mvc:annotation-driven >
- <!-- 消息转换器 -->
- <mvc:message-converters register-defaults="true">
- <bean class="org.springframework.http.converter.StringHttpMessageConverter">
- <property name="supportedMediaTypes" value="text/html;charset=UTF-8"/>
- </bean>
- </mvc:message-converters>
- </mvc:annotation-driven>
原理: StringHttpMessageConverter的父类里有个List<MediaType> supportedMediaTypes属性,用来存放 StringHttpMessageConverter支持需特殊处理的 MediaType 类型,如果需处理的 MediaType 类型不在 supportedMediaTypes列表中,则采用默认字符集。
尝试方法二: 在配置文件中的mvc:annotation-driven中添加如下代码
- <mvc:annotation-driven>
- <mvc:message-converters>
- <bean class="org.springframework.http.converter.StringHttpMessageConverter">
- <property name="supportedMediaTypes">
- <list>
- <span style="white-space:pre"> </span> <value>text/html;charset=UTF-8</value>
- <value>application/json;charset=UTF-8</value>
- <value>*/*;charset=UTF-8</value>
- </list>
- </property>
- </bean>
- </mvc:message-converters>
- </mvc:annotation-driven>
原理: 原理同上,但是这里多加了几个value。
尝试方法三: 在@RequestMapping里的配置produces="text/html;charset=UTF-8;"
- @RequestMapping(value = "***",produces="text/html;charset=UTF-8;")
原理: 手动给对应的Accept返回制定格式编码数据。
尝试方法四: 在@RequestMapping里的并发配置produces={"application/json;","text/html;charset=UTF-8;"}
- @RequestMapping(value = "***",produces={"application/json;","text/html;charset=UTF-8;"})
原理: 手动给对应的Accept返回制定格式编码数据。
尝试方法五: 在@RequestMapping里的并发配置produces={"text/html;charset=UTF-8;","application/json;"}
- @RequestMapping(value = "***",produces={"text/html;charset=UTF-8;","application/json;"})
注意: 这里和上个方法的区别是,produces里面的顺序对调了
方法四和方法五对比分析:
produces={"text/html;charset=UTF-8;","application/json;"}
这样设置,这样普通浏览器的请求就能正常显示中文,而客户端的模拟请求(可以是ajax或http)则手动指定Accept的charset,即可正常接收中文。
客户端使用Ajax请求跨域问题
header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept');
- <span style="white-space:pre"> </span>$.ajax(url, {
- data: data,
- dataType: "jsonp",
- jsonpCallback: 'testGetData',
- timeout: "15000", //超时时间设置为3秒;
- type: "POST",
- success: function(response) {
- var result = 'success:' + JSON.stringify(response);
- //返回的是utf8编码,需要手动转为utf16
- console.log(result);
- //alert(result);
- },
- error: function(error) {
- var result = 'error:' + JSON.stringify(error);
- console.log(result);
- //alert(result);
- }
- });
JSONP传递Java Web后台代码片段:
- //判断是否是jsonp请求
- String jsoncallback = request.getParameter("callback");
2.判断如果是JSONP的请求则用JSONP的返回参数,否则用正常的(示例里面使用了Jackson来辅助)
- public static String getJsonPData(String callbackName,Map<String, Object> data) throws JsonGenerationException, JsonMappingException, IOException{
- ObjectMapper mapper = new ObjectMapper();
- String json = mapper.writeValueAsString(data);
- System.out.println("jsonp回调:"+callbackName);
- System.out.println("jackson解析的字符串:"+json);
- String result = "";
- if(callbackName==null||callbackName==""){
- //普通请求
- result = json;
- }else{
- //jsonp请求,返回的格式是类似于一个函数的字符串形式(前端再执行这个回调来获取数据)
- result = callbackName+"("+json+")";
- }
- System.out.println("最终结果:"+result);
- return result;
- }
ajax提交 返回中文乱码问题的更多相关文章
- Ajax提交后台中文乱码问题
今天项目组同事反映,之前有一个正常的请求,今天突然后台获取参数的值出现了中文乱码,怀疑是之前更新jar包所致,笔者仔细想了想更新的内容,仿佛没有涉及到编码的变更啊,然后开始排查,首先后台加了强制以ut ...
- struts2 action获取ajax提交数据中文乱码问题
有个人和我问题相同,地址在这: 解决方法: 在ajax的属性添加这句:contentType:'application/x-www-form-urlencoded; charset=utf-8',
- spring ajax以及页面返回中文乱码问题解决
在spring配置文件中添加 <!--返回中文乱码--> <mvc:annotation-driven > <!-- 消息转换器 --> <mvc:messa ...
- Springboot @ResponseBody返回中文乱码
最近我在把Spring 项目改造Springboot,遇到一个问题@ResponseBody返回中文乱码,因为response返回的content-type一直是application/json;ch ...
- Tomcat JSP提交参数中文乱码问题解决
参考: http://blog.csdn.net/error_case/article/details/8250209 中文乱码是个老生常谈的问题,一般情况下,只要保证页面,web服务器,数据库的编码 ...
- jquery的ajax()函数传值中文乱码解决方法介绍
jquery的ajax()函数传值中文乱码解决方法介绍,需要的朋友可以参考下 代码如下: $.ajax({ dataType : ‘json', type : ‘POST', url : ‘http: ...
- form提交数据中文乱码问题总结
一:form在前台以post方式提交数据: 浏览器将数据(假设为“中国”)发送给服务器的时候,将数据变成0101的二进制数据(假设为98 99)时必然要查码表,浏览器以哪个码表打开网页,浏览器就以哪个 ...
- ajax()函数传值中文乱码解决方法介绍
jquery的ajax()函数传值中文乱码解决方法介绍,需要的朋友可以参考下 复制代码 代码如下: $.ajax({ dataType : ‘json',type : ‘POST',url : ‘ht ...
- 解决SpringMVC的@ResponseBody返回中文乱码
SpringMVC的@ResponseBody返回中文乱码的原因是SpringMVC默认处理的字符集是ISO-8859-1,在Spring的org.springframework.http.conve ...
随机推荐
- 反射那点基础-Method
目录 1 获取 Method 1.1 方法 1.2 实例 2 Method 的方法 2.1 Java 方法基础知识 2.2 修饰符相关方法 2.2.1 获取修饰符 2.2.2 判断是否为 defaul ...
- .NetCore 资料分享
.NetCore3.0 你还不打算入手么? 这次主要是推荐一些自己学习中遇到的一些好的资料和自己的看法( 我推荐的都是我看过的 Asp.Net Core 不做介绍了,直接分享资料了 资料: .NetC ...
- 埋锅。。。BZOJ1004-置换群+burnside定理+
看这道题时当时觉得懵逼...这玩意完全看不懂啊...什么burnside...难受... 于是去看了点视频和资料,大概懂了置换群和burnside定理,亦步亦趋的懂了别人的代码,然后慢慢的打了出来.. ...
- Python—randonm模块介绍
random是python产生伪随机数的模块 >>> random.randrange(1,10) #返回1-10之间的一个随机数,不包括10 >>> random ...
- Node.js api接口和SQL数据库关联
数据库表创建 服务器环境配置.连接 .操作.数据库 API接口 原则:
- iOS开发——无网占位图的实现
https://www.jianshu.com/p/d537393fe247 https://github.com/wyzxc/CQPlaceholderViewhttps://github.com/ ...
- ad2017安装以及破解
1.破Ad破解https://wenku.baidu.com/view/5e23a78e2e3f5727a5e962dd.html 2. Ad 汉化https://jingyan.baidu.com/ ...
- l^oo不可分的两个注意点
1 不理解等一个等式 , 2.不理解为什么,一个可分的集合里面有不可数的子集?谢谢 1是 2.是可分集合里面每个元素 做中心后的一个开覆盖 所有0 1序列是和所有二进制小数 可以一一对应 而 ...
- 使用Vue自己做一个简单的MarkDown在线编辑器
1.首先要下载mark组件. npm install marked --save 2.在Vcontent.vue中简单写一些样式. <template> <div class=&qu ...
- MySQL 5.7默认ONLY_FULL_GROUP_BY语义介绍
mysql 5.7版本 出现 ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corre ...