基于Spring 3.1.4.RELEASE MVC 的 web 应用 ajax 异步请求中文乱码bug有解决方案吗?
@红薯 如果没错的话,应该是个bug。spring 组织中不知道是哪只猿居然在 StringHttpMessageConverter 中 写下这行代码
public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");
自己解决了。Spring默认用的是Jackson, 只要改下pom文件引入Jackson 的jar包就OK了。###### 一句话就解决了
你具体使用的情况详细描述下吧 ###### 嗯 这是个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 : 我的项目里就是这样配置的######您尝试过吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。