`

坑爹的spring3.1加jackson的json中文乱码

 
阅读更多
web开发遇到json中文乱码,上网查并吸取众长,解决如下:
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.http.converter.HttpMessageNotReadableException;
import org.springframework.http.converter.HttpMessageNotWritableException;
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;

	public UTF8StringHttpMessageConverter() {
		this(DEFAULT_CHARSET);
	}

	public UTF8StringHttpMessageConverter(Charset defaultCharset) {
		super(new MediaType("application", "json", defaultCharset), MediaType.ALL);
		this.availableCharsets = new ArrayList<Charset>(Charset.availableCharsets().values());
	}

	@Override
	protected boolean supports(Class<?> clazz) {
		return String.class.equals(clazz);
	}

	@Override
	protected String readInternal(Class<? extends String> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
		MediaType contentType = inputMessage.getHeaders().getContentType();
		Charset charset = contentType.getCharSet() != null ? contentType.getCharSet() : DEFAULT_CHARSET;
		return FileCopyUtils.copyToString(new InputStreamReader(inputMessage.getBody(), charset));
	}

	@Override
	protected void writeInternal(String t, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
		MediaType contentType = outputMessage.getHeaders().getContentType();
		Charset charset = contentType.getCharSet() != null ? contentType.getCharSet() : DEFAULT_CHARSET;
		FileCopyUtils.copy(t, new OutputStreamWriter(outputMessage.getBody(), charset));
	}

	protected List<Charset> getAcceptedCharsets() {
		return this.availableCharsets;
	}

	@Override
	protected Long getContentLength(String s, MediaType contentType) {
		if (contentType != null && contentType.getCharSet() != null) {
			Charset charset = contentType.getCharSet();
			try {
				return (long) s.getBytes(charset.name()).length;
			} catch (UnsupportedEncodingException ex) {
				throw new InternalError(ex.getMessage());
			}
		} else {
			return null;
		}
	}
}



springmvc.xml文件里
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="" />
		<property name="suffix" value="" />
	</bean>
	<!-- 自动扫描且只扫描@Controller -->
	<context:component-scan base-package="com.*" use-default-filters="false">
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
	</context:component-scan>

	 <mvc:annotation-driven>
		<mvc:message-converters register-defaults="true">
			<bean class="com.ssports.jiangsuapp.util.UTF8StringHttpMessageConverter"/>
		</mvc:message-converters>
	</mvc:annotation-driven> 

	<mvc:default-servlet-handler />
分享到:
评论

相关推荐

    易语言编写的坑爹记事本

    《易语言编写的坑爹记事本》是一款由易语言编程开发的简易记事本程序。易语言,作为中国本土的编程语言,以其简洁的语法和面向初学者的设计,为许多编程爱好者提供了学习编程的入口。然而,"坑爹记事本"这个称号可能...

    c语言小游戏之坑爹大冒险

    本项目聚焦于C语言编写的小游戏——"坑爹大冒险",旨在提供一个有趣的实践平台,帮助学习者加深对C语言的理解并提升编程技能。 "坑爹大冒险"是一款基于命令行界面的文字冒险游戏,它通过简单的文字描述和用户输入,...

    快速解决处理后台返回json数据格式的问题

    但是,又很坑爹了,这个json没问题,其他一些json又出现问题了,如下图: 解决:判断后台返回的数据格式是否字符串,是则转,不是则不转 代码如下: var $obj = (typeof data.content == 'string') ? JSON.parse...

    c语言坑爹大冒险完整源码

    c语言坑爹大冒险完整源码 c语言坑爹大冒险完整源码 c语言坑爹大冒险完整源码 c语言坑爹大冒险完整源码 c语言坑爹大冒险完整源码 c语言坑爹大冒险完整源码 c语言坑爹大冒险完整源码 c语言坑爹大冒险完整源码 c语言...

    【安卓】史上最坑爹游戏6 内购破解版

    《史上最坑爹的游戏6》是由珠海顶峰互动科技研发的一款休闲益智类解谜游戏,简称“坑爹游戏”,于2013年发行。《史上最坑爹的游戏》是一个让人抓狂、让人迷恋、让人傻笑的游戏。 其中设计了大量奇思妙想,趣味连篇的...

    【安卓】史上最坑爹游戏8 内购破解版

    《史上最坑爹的游戏8》是由珠海顶峰互动科技研发的一款休闲益智类解谜游戏,简称“坑爹游戏”,于2013年发行。《史上最坑爹的游戏》是一个让人抓狂、让人迷恋、让人傻笑的游戏。 其中设计了大量奇思妙想,趣味连篇的...

    【安卓】史上最坑爹的游戏9 内购破解版

    《史上最坑爹的游戏9》是由珠海顶峰互动科技研发的一款休闲益智类解谜游戏,简称“坑爹游戏”,于2013年发行。《史上最坑爹的游戏》是一个让人抓狂、让人迷恋、让人傻笑的游戏。 其中设计了大量奇思妙想,趣味连篇的...

    坑爹跑酷(马里奥改版)

    超级有趣的坑爹跑酷!!! 能坑到让你怀疑人生的坑爹跑酷!!! 新增排行榜,让你与对手一决高下!!! 作者亲自测试 所有关卡均可通关 满分100分 你能夺得多少分呢? 赶快下载试试看吧!!! Tip: ▄█▀█● ...

    坑爹大冒险(C语言).zip

    "坑爹大冒险(C语言).zip" 这个压缩包文件看起来是一个与C语言编程相关的项目,可能是一个小型游戏或教学示例。通过它的标题,我们可以推测它包含了一些设计巧妙、富有挑战性的编程练习或者游戏关卡,旨在帮助学习...

    c语言坑爹大冒险.zip

    在这个“C语言坑爹大冒险”的压缩包中,我们可以期待一系列与C语言编程相关的挑战和实例,可能涉及到陷阱、常见错误以及如何避免它们。这个资源可能适合初学者或有经验的程序员用来提升C语言技能。 C语言是一种结构...

    c语言坑爹大冒险.rar

    《C语言坑爹大冒险》这个压缩包文件的标题似乎是一种幽默的说法,旨在指出学习C语言过程中可能会遇到的挑战和困惑。C语言是计算机科学的基础,它的语法严谨、功能强大,但同时也因为其低级特性而对初学者来说充满...

    【安卓】史上最坑爹游戏内购破解版

    《史上最坑爹的游戏》是由珠海顶峰互动科技研发的一款休闲益智类解谜游戏,简称“坑爹游戏”,于2013年发行。《史上最坑爹的游戏》是一个让人抓狂、让人迷恋、让人傻笑的游戏。 其中设计了大量奇思妙想,趣味连篇的...

    坑爹的RockSaw和坑爹的windows7

    标题中的“坑爹的RockSaw和坑爹的windows7”可能是指在使用RockSaw工具(一个可能的开源或第三方软件)时遇到了问题,同时这些问题在Windows 7操作系统上尤为突出。RockSaw可能是一个用于处理数据、分析或开发的工具...

    python爬取坑爹网图片.py

    爬取这个搞笑网站。

Global site tag (gtag.js) - Google Analytics