Spring 3.1.4 MVC ajax 异步请求中文乱码 400 请求报错 -问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

Spring 3.1.4 MVC ajax 异步请求中文乱码 400 请求报错 

2020-05-28 16:31:26 258 1

基于Spring 3.1.4.RELEASE MVC 的 web 应用 ajax 异步请求中文乱码bug有解决方案吗?
@红薯 如果没错的话,应该是个bug。spring 组织中不知道是哪只猿居然在 StringHttpMessageConverter 中 写下这行代码
public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");

取消 提交回答
全部回答(1)
  • kun坤
    2020-05-29 11:09:29

    自己解决了。Spring默认用的是Jackson, 只要改下pom文件引入Jackson 的jar包就OK了。###### 一句话就解决了

    1. @RequestMapping(params="x", produces="text/plain;charset=utf-8")  
    2. or 
    3. produces = "text/html;charset=UTF-8"  
    ajax 请求和普通的 http 请求,其实并没有什么区别的。

    你具体使用的情况详细描述下吧 ###### 嗯 这是个bug 我是直接把那个类复制过来了 然后改成了utf-8就可以了

    ######回复 @熊大信了熊二的话 : 没有办法通过配置文件来解决?######@Minuzy 我用的也是maven 你直接把这个类安装org.springframe的路径直接拷贝过去。放在src下面就可以了######我也考虑到修改源码的问题,但是我用的Maven管理,没有自己的仓库,修改后的源码不知道放到哪去。所以只能想有没有不修改源码的方案。###### @红薯 您看下。http请求正常。就是ajax 请求是乱码,firebug 抓取到的 Response的信息 Content-Type:text/plain;charset=ISO-8859-1

    @ResponseBody @RequestMapping(value = "/test", method = RequestMethod.POST) public String register() {

    ResultVO resultVO = new ResultVO(true);

    resultVO.setMessage("[中文测试]"); return new Gson().toJson(resultVO); }

    // ResultVO 是个简单的VO

    ######回复 @Minuzy : new Gson().toJson(resultVO)都是多余,直接 return resultVO,方法返回resultVO不是String,Spring自动转json###### @午后冬日 请问Controller中的用的是跟我一样返回String吗?还是返回ModelAndView?######default就是让你自己再设置。人家就是英文没办法。######分享一下你的解决方案。######加端配置就搞定了,网上搜一下满世界都是######ok!等我从厕所出来告诉你######把解决方案贴出来一下呗:)###### 1、自己写一个处理json的view,类似

    public class JsonView extends AbstractView {
    
        @Override
        protected void renderMergedOutputModel(Map<String, Object> map,
                HttpServletRequest request, HttpServletResponse response)
                throws Exception {
            response.setContentType("application/x-www-form-urlencoded;charset=UTF-8");        
            response.setHeader("Cache-Control",
                    "no-store,max-age=0,no-cache,must-revalidate");        
            response.addHeader("Cache-Control", "post-check=0,pre-check=0");        
            response.setHeader("Pragma", "no-cache");
            
            String jsonObj = (String) map.get("ajax_json");
            response.getWriter().write(jsonObj);
            response.flushBuffer();
        }
    Controller里面
    public ModelAndView init(HttpServletRequest request,
                HttpServletResponse response) throws Exception {
            Map<String, String> map = new HashMap<String, String>();
            String imgList = homeService.getInitUrl();
            map.put("ajax_json", imgList);
            return new ModelAndView("jsonView", map);
        }
    或者 2、SpringMVC默认是用Jackson处理json的,converter使用MappingJackson2HttpMessageConverter,charset默认就是utf-8,mediatype是application-json ######谢谢你!这样那还不如覆盖原有类方便。。:)######老外的默认编码都是 iso8859-1###### 解决请求乱码问题,加在WEB-INF/web.xml文件中
    <!--解决spring乱码问题 -->
        <filter>
            <filter-name>encoding</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
            <init-param>
                <param-name>forceEncoding</param-name>
                <param-value>true</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>encoding</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    解决返回数据乱码问题,加在spring配置文件中
    <bean class ="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >        
            <property name="messageConverters">
                <list>
                    <!-- 设置返回字符串编码 -->
                    <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                        <property name = "supportedMediaTypes">
                            <list>
                                <value>text/html;charset=UTF-8</value>
                            </list>
                        </property>
                    </bean>
                    <!-- json转换器 -->
                    <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" >
                        <property name="supportedMediaTypes">
                            <list>
                                <value>text/html;charset=UTF-8</value>
                            </list>
                        </property>
                    </bean>
                </list>
            </property>
        </bean>
    ######我当时用springMVC返回json的时候也是这样处理的,defaut_encoding就是表示什么都没设的时候的默认值,forceEncoding就是你当前需要设置的编码,至少我们以前那样做是OK的。######回复 @午后冬日 : 我这反正是不行。:)######回复 @Minuzy : 我的项目里就是这样配置的######您尝试过吗?
    0 0
相关问答

40

回答

[@徐雷frank][¥20]什么是JAVA的平台无关性

大河人家 2018-10-29 23:55:20 144759浏览量 回答数 40

162

回答

惊喜翻倍:免费ECS+免费环境配置~!(ECS免费体验6个月活动3月31日结束)

豆妹 2014-10-29 17:52:21 226221浏览量 回答数 162

8

回答

OceanBase 使用动画(持续更新)

mq4096 2019-02-20 17:16:36 337079浏览量 回答数 8

13

回答

[@饭娱咖啡][¥20]我想知道 Java 关于引用那一块的知识

心意乱 2018-10-31 18:44:12 142479浏览量 回答数 13

111

回答

OSS存储服务-客户端工具

newegg11 2012-05-17 15:37:18 295638浏览量 回答数 111

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 147266浏览量 回答数 22

18

回答

阿里云开放端口权限

xcxx 2016-07-20 15:03:33 646854浏览量 回答数 18

31

回答

[@倚贤][¥20]刚学完html/css/js的新手学习servlet、jsp需要注意哪些问题?

弗洛伊德6 2018-10-27 21:52:43 146066浏览量 回答数 31

42

回答

【精品问答集锦】Python热门问题

小六码奴 2019-05-30 15:27:34 137121浏览量 回答数 42

249

回答

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2014-02-14 15:26:06 305685浏览量 回答数 249
+关注
0
文章
13401
问答
问答排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载