论坛首页 Java企业应用论坛

spring3.1.1 使用@ResponseBody 返回中文时出现乱码

浏览 6294 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-02-21  
        @RequestMapping(params="method=test")
	@ResponseBody
	public String test(){
		return "测试";
	}

$.post('<%=request.getContextPath()%>/customer.do?method=test',{},function(data){
				 alert(data);//接收的是乱码。
			});


试了网上很多方法都不能决解。求解阿
   发表时间:2013-02-21  
请在你的Spring配置文件加上:
<bean class="UTF8StringBeanPostProcessor" />

附上UTF8StringBeanPostProcessor的代码,原理相信你看到代码也知道了。
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.http.MediaType;
import org.springframework.http.converter.StringHttpMessageConverter;

public class UTF8StringBeanPostProcessor implements BeanPostProcessor {

	@Override
	public Object postProcessAfterInitialization(Object bean, String beanName)
			throws BeansException {
		if(bean instanceof StringHttpMessageConverter){  
            MediaType mediaType = new MediaType("text", "plain", Charset.forName("UTF-8"));  
            List<MediaType> types = new ArrayList<MediaType>();  
            types.add(mediaType);  
            ((StringHttpMessageConverter) bean).setSupportedMediaTypes(types);  
        }  
        return bean;
	}

	@Override
	public Object postProcessBeforeInitialization(Object bean, String beanName)
			throws BeansException {
		// do nothing
		return bean;
	}

}
0 请登录后投票
   发表时间:2013-02-22  
Tony_Qiu 写道
请在你的Spring配置文件加上:
<bean class="UTF8StringBeanPostProcessor" />

附上UTF8StringBeanPostProcessor的代码,原理相信你看到代码也知道了。
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.http.MediaType;
import org.springframework.http.converter.StringHttpMessageConverter;

public class UTF8StringBeanPostProcessor implements BeanPostProcessor {

	@Override
	public Object postProcessAfterInitialization(Object bean, String beanName)
			throws BeansException {
		if(bean instanceof StringHttpMessageConverter){  
            MediaType mediaType = new MediaType("text", "plain", Charset.forName("UTF-8"));  
            List<MediaType> types = new ArrayList<MediaType>();  
            types.add(mediaType);  
            ((StringHttpMessageConverter) bean).setSupportedMediaTypes(types);  
        }  
        return bean;
	}

	@Override
	public Object postProcessBeforeInitialization(Object bean, String beanName)
			throws BeansException {
		// do nothing
		return bean;
	}

}

可能他的源文件就不是UTF8编码的...
0 请登录后投票
   发表时间:2013-02-24   最后修改:2013-02-24
  @RequestMapping(params="method=test", produces="text/plain;charset=utf-8")

 

0 请登录后投票
   发表时间:2013-02-25   最后修改:2013-02-25
lestang 写道


  @RequestMapping(params="method=test", produces="text/plain;charset=utf-8")




正解,或者。

produces = "text/html;charset=UTF-8"
0 请登录后投票
   发表时间:2013-02-28  
用这种方式
$.ajax({})
0 请登录后投票
   发表时间:2013-03-04  
在dispatch-servlet.xml以下配置,应该可以了,
<bean id="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>text/plain;charset=UTF-8</value>
</list>
</property>
</bean>
0 请登录后投票
   发表时间:2013-03-20  
hjl008 写道
在dispatch-servlet.xml以下配置,应该可以了,
<bean id="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>text/plain;charset=UTF-8</value>
</list>
</property>
</bean>

正解
0 请登录后投票
   发表时间:2013-07-23  
new String(data.getBytes("iso-8859-1"), "utf-8")呢
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics