Spring 3.0.5 @ResponseBody 返回json中文乱码

要重写AbstractHttpMessageConverter类:

具体内容如下:

package com.ylzinfo.util;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("text", "plain", DEFAULT_CHARSET), MediaType.ALL);this.availableCharsets = new ArrayList<Charset>(Charset.availableCharsets().values());}/** * Indicates whether the {@code Accept-Charset} should be written to any outgoing request. * <p>Default is {@code true}. */public void setWriteAcceptCharset(boolean writeAcceptCharset) {this.writeAcceptCharset = writeAcceptCharset;}@Overridepublic boolean supports(Class<?> clazz) {return String.class.equals(clazz);}@Overrideprotected String readInternal(Class clazz, HttpInputMessage inputMessage) throws IOException {Charset charset = getContentTypeCharset(inputMessage.getHeaders().getContentType());return FileCopyUtils.copyToString(new InputStreamReader(inputMessage.getBody(), charset));}@Overrideprotected Long getContentLength(String s, MediaType contentType) {Charset charset = getContentTypeCharset(contentType);try {return (long) s.getBytes(charset.name()).length;}catch (UnsupportedEncodingException ex) {// should not occurthrow new InternalError(ex.getMessage());}}@Overrideprotected void writeInternal(String s, HttpOutputMessage outputMessage) throws IOException {if (writeAcceptCharset) {outputMessage.getHeaders().setAcceptCharset(getAcceptedCharsets());}Charset charset = getContentTypeCharset(outputMessage.getHeaders().getContentType());FileCopyUtils.copy(s, new OutputStreamWriter(outputMessage.getBody(), charset));}/** * Return the list of supported {@link Charset}. * * <p>By default, returns {@link Charset#availableCharsets()}. Can be overridden in subclasses. * * @return the list of accepted charsets */protected List<Charset> getAcceptedCharsets() {return this.availableCharsets;}private Charset getContentTypeCharset(MediaType contentType) {if (contentType != null && contentType.getCharSet() != null) {return contentType.getCharSet();}else {return DEFAULT_CHARSET;}}}在springmvc的配置xml里面<context:component-scan标签钱加上:

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

版权声明:本文为博主原创文章,,未经博主允许不得转载。

你看报表时,梅里雪山的金丝猴刚好爬上树尖。

Spring 3.0.5 @ResponseBody 返回json中文乱码

相关文章:

你感兴趣的文章:

标签云: