Springmvc JSON 中文乱码

原因:@ResponseBody默认采取("ISO-8859-1");

1.修改为UTF-8;


import java.io.IOException;  
import java.io.InputStreamReader;  
import java.io.OutputStreamWriter;  
import java.io.UnsupportedEncodingException;  
import java.nio.charset.Charset;  
import java.util.ArrayList;  
import java.util.List;  
  
import org.springframework.http.HttpInputMessage;  
import org.springframework.http.HttpOutputMessage;  
import org.springframework.http.MediaType;  
import org.springframework.http.converter.AbstractHttpMessageConverter;  
import org.springframework.util.FileCopyUtils;  
  
public class UTF8StringHttpMessageConverter extends AbstractHttpMessageConverter<String> {  
  
  
    public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");  
    private final List<Charset> availableCharsets;  
    private boolean writeAcceptCharset = true;  
  
  
    public UTF8StringHttpMessageConverter() {  
        super(new MediaType[] {  
                new MediaType("text", "plain",  
                    UTF8StringHttpMessageConverter.DEFAULT_CHARSET),  
                MediaType.ALL });  
        this.availableCharsets = new ArrayList<Charset>(Charset.availableCharsets()  
                        .values());  
    }  
  
  
    public void setWriteAcceptCharset(boolean writeAcceptCharset) {  
        this.writeAcceptCharset = writeAcceptCharset;  
    }  
  
  
    public boolean supports(Class<?> clazz) {  
        return String.class.equals(clazz);  
    }  
  
  
    @SuppressWarnings("rawtypes")  
    protected String readInternal(Class clazz, HttpInputMessage inputMessage)   
            throws IOException {  
        Charset charset = getContentTypeCharset(inputMessage.getHeaders()  
                    .getContentType());  
        return FileCopyUtils.copyToString(new InputStreamReader(inputMessage.getBody(),   
                    charset));  
    }  
  
  
    protected Long getContentLength(String s, MediaType contentType) {  
        Charset charset = getContentTypeCharset(contentType);  
        try {  
            return Long.valueOf(s.getBytes(charset.name()).length);  
        } catch (UnsupportedEncodingException ex) {  
  
  
            throw new InternalError(ex.getMessage());  
        }  
    }  
  
  
    protected void writeInternal(String s, HttpOutputMessage outputMessage)   
            throws IOException {  
        if (this.writeAcceptCharset) {  
            outputMessage.getHeaders().setAcceptCharset(getAcceptedCharsets());  
        }  
        Charset charset = getContentTypeCharset(outputMessage.getHeaders()  
                    .getContentType());  
        FileCopyUtils.copy(s, new OutputStreamWriter( outputMessage.getBody(),   
                    charset));  
    }  
    protected List<Charset> getAcceptedCharsets() {  
        return this.availableCharsets;  
    }  
    private Charset getContentTypeCharset(MediaType contentType) {  
        if ((contentType != null) && (contentType.getCharSet() != null)) {  
            return contentType.getCharSet();  
        }  
        return DEFAULT_CHARSET;  
    }  
}  




2.注入到springmvc.xml;

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
   <property name="messageConverters">
       <list>
           <bean id="utf8StringHttpMessageConverter"  class="com.zhijin.util.UTF8StringHttpMessageConverter" />
       </list>
   </property>
</bean>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值