关于Sping MVC 的 @ResponseBody 乱码问题的完美解决
重写了StringHttpMessageConverter 类,如下
package org.springframework.http.converter;
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.util.FileCopyUtils;
/**
* 通过重写解决了乱码问题
*
* @author jiulong_ck
*
*/
public class StringHttpMessageConverter extends AbstractHttpMessageConverter<String> {
public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); // 在这里先写好自己使用的默认编码
private final List<Charset> availableCharsets;
private boolean writeAcceptCharset = true;
public StringHttpMessageConverter() {
super(new MediaType[] { new MediaType("text", "plain", DEFAULT_CHARSET), MediaType.ALL });
this.availableCharsets = new ArrayList(Charset.availableCharsets().values());
}
public void setWriteAcceptCharset(boolean writeAcceptCharset) {
this.writeAcceptCharset = writeAcceptCharset;
}
public boolean supports(Class<?> clazz) {
return String.class.equals(clazz);
}
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());
}
// 重新定义 MediaType ,解决乱码
/****************************/
MediaType contentType = outputMessage.getHeaders().getContentType();
Charset contentTypeCharset = getContentTypeCharset(contentType);
contentType = new MediaType(contentType.getType(), contentType.getSubtype(), contentTypeCharset);
outputMessage.getHeaders().setContentType(contentType);
/****************************/
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;
}
}
分享到:
相关推荐
mybatis+sping mvc mybatis+sping mvcmybatis+sping mvc mybatis+sping mvcmybatis+sping mvc mybatis+sping mvcmybatis+sping mvc mybatis+sping mvcmybatis+sping mvc mybatis+sping mvc
Spring MVC 是一个强大的Java Web开发框架,用于构建高效、模块化的Web应用程序。在这个"Spring MVC 简单小例子"中,我们将深入探讨如何利用它实现一个基础的"Hello, World!"程序,同时涵盖自定义Filter和Servlet...
sping mvc 整合 mybatis
Spring MVC是Spring框架的一部分,主要用于构建Web应用程序的模型-视图-控制器(MVC)架构。这个简单的模拟项目旨在帮助开发者深入理解Spring...这不仅有助于增强你的编程技巧,还能提升你在实际项目中的问题解决能力。
《精通Spring MVC4》这本书是Java开发者深入理解并掌握Spring MVC框架的重要参考资料。Spring MVC作为Spring框架的一部分,是构建现代Web应用程序的首选工具之一。它提供了模型-视图-控制器(MVC)架构模式,帮助...
Spring MVC 是一个基于Java的轻量级Web应用框架,它是Spring框架的重要组成部分,主要用于构建Web应用程序的后端控制器。在Spring MVC中,依赖管理是非常关键的一环,因为它确保了项目中使用的库版本的一致性和兼容...
网站推广利用Sping MVC框架实现销售平台的推广
校园商铺平台采用流行的SSM(Sping,Sping MVC,MyBatis)框架开发,采用Maven管理资源,适合学习和二次开发,另外原来还有完整的一步一步带着做出这个项目的16章视频,文件内有视频获取方式。
Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建模型-视图-控制器(MVC)架构的应用程序提供了强大的支持。在本压缩包中,包含了一系列用于配置Spring MVC 3.2版本框架所需的jar包。这些库是开发Spring MVC...
Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用于构建 MVC(Model-View-Controller)模式的 Web 应用程序。在本示例中,"spring+spring mvc" 提供了一个简单的小型应用实例,...
### Spring MVC 学习总结 #### 一、Spring MVC 的工作流程与执行过程概述 Spring MVC 是基于 Spring 框架构建的一个轻量级 Web 应用程序模型—视图—控制器 (Model-View-Controller, MVC) 框架。它通过一系列组件...
本项目“最新java技术栈RBAC基于spring security与sping mvc分布式权限管理系统”旨在利用先进的技术栈来实现这一目标。下面将详细介绍这个系统的核心知识点。 1. **Spring MVC**:Spring MVC是Spring框架的一部分...
Spring、Spring MVC 和 Hibernate 是Java开发中非常流行的三大框架,它们通常被组合使用,被称为SSH框架,用于构建高效、模块化的Web应用程序。Spring是整个应用的基础,提供了依赖注入(DI)和面向切面编程(AOP)...
### Sping+MVC框架搭建详解 #### 一、项目准备与环境搭建 **1. 创建Web动态工程** - 首先,在开发环境中创建一个新的Web动态工程,并将其命名为`SMFrame`,这个名字代表着该工程将结合使用Spring与MVC框架。 **2...
Spring Web MVC是Spring框架的一部分,专门用于构建Web应用程序。它为开发者提供了一种优雅的方式来处理HTTP请求和响应,实现模型-视图-控制器(MVC)设计模式。在这个入门技术源码中,我们可以深入理解Spring MVC的...
**Spring MVC + MyBatis 深度解析** 在当今的Java Web开发中,Spring MVC 和 MyBatis 是两个非常重要的框架。Spring MVC 作为Spring框架的一部分,负责处理Web请求和响应,提供了一种优雅的方式来组织和解耦应用...
它提供了一种模型-视图-控制器(MVC)架构,使得开发者可以将业务逻辑、用户界面和控制逻辑分离,便于维护和扩展。在本项目中,Spring MVC可能被用来处理HTTP请求,展示搜索结果,并与Lucene集成,实现搜索功能。 1...
Spring MVC是Spring框架的一个核心模块,专为构建Web应用程序而设计。它提供了模型-视图-控制器(MVC)架构,使开发者能够有效地分离业务逻辑、数据处理和用户界面。在"Spring MVC 4.2.3"版本中,我们看到了一系列的...
主要介绍了Spring MVC参数校验的相关资料,主要是针对`@RequestBody`返回`400`的问题,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。