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

目录(?)[+]

返回的结果中,中文全部被问号(?)代替的解决办法:

*-servlet.xml的部分配置如下:
  1. <bean id="utf8Charset" class="java.nio.charset.Charset"
  2. factory-method="forName">
  3. <constructor-arg value="UTF-8"/>
  4. </bean>
  5. <mvc:annotation-driven>
  6. <mvc:message-converters>
  7. <bean class="org.springframework.http.converter.StringHttpMessageConverter">
  8. <constructor-arg ref="utf8Charset" />
  9. </bean>
  10. </mvc:message-converters>
  11. </mvc:annotation-driven>

思路非常简单:查看StringHttpMessageConverter可知其有两个构造函数,

  1. public StringHttpMessageConverter() {
  2. this(DEFAULT_CHARSET);
  3. }
  1. public StringHttpMessageConverter(Charset defaultCharset) {
  2. super(new MediaType("text", "plain", defaultCharset), MediaType.ALL);
  3. this.defaultCharset = defaultCharset;
  4. this.availableCharsets = new ArrayList<Charset>(Charset.availableCharsets().values());
  5. }

这里采用第二个构造函数向其中注入我们的utf8Charset

上面配置会覆盖 mvc:annotation-driven 默认配置的StringHttpMessageConverter,其余的MessageConverter应该不会受到影响。

具体文档描述如下:

  1. Element : message-converters
  2. Configures one or more HttpMessageConverter types to use for converting @RequestBody method parameters and
  3. @ResponseBody method return values. Using this configuration element is optional. HttpMessageConverter
  4. registrations provided here will take precedence over HttpMessageConverter types registered by default. Also see
  5. the register-defaults attribute if you want to turn off default registrations entirely.

<mvc:annotation-driven>会默认配置一些HttpMessageConverter,Spring Reference描述如下:

  1. HttpMessageConverter support for @RequestBody method parameters and @ResponseBody method return values from @RequestMapping or @ExceptionHandler methods.
  2. This is the complete list of HttpMessageConverters set up by mvc:annotation-driven:
  3. ByteArrayHttpMessageConverter converts byte arrays.
  4. StringHttpMessageConverter converts strings.
  5. ResourceHttpMessageConverter converts to/from org.springframework.core.io.Resource for all media types.
  6. SourceHttpMessageConverter converts to/from a javax.xml.transform.Source.
  7. FormHttpMessageConverter converts form data to/from a MultiValueMap<String, String>.
  8. Jaxb2RootElementHttpMessageConverter converts Java objects to/from XML — added if JAXB2 is present on the classpath.
  9. MappingJackson2HttpMessageConverter (or MappingJacksonHttpMessageConverter) converts to/from JSON — added if Jackson 2 (or Jackson) is present on the classpath.
  10. AtomFeedHttpMessageConverter converts Atom feeds — added if Rome is present on the classpath.
  11. RssChannelHttpMessageConverter converts RSS feeds — added if Rome is present on the classpath.

返回的结果中,中文全部是乱码(非问号)的解决办法:

在web.xml中加入以下Filter:

  1. <filter>
  2. <filter-name>encodingFilter</filter-name>
  3. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  4. <init-param>
  5. <param-name>encoding</param-name>
  6. <param-value>UTF-8</param-value>
  7. </init-param>
  8. <init-param>
  9. <param-name>forceEncoding</param-name>
  10. <param-value>true</param-value>
  11. </init-param>
  12. </filter>
  13. <filter-mapping>
  14. <filter-name>encodingFilter</filter-name>
  15. <url-pattern>/*</url-pattern>
  16. </filter-mapping>

Spring @ResponseBody 返回乱码 的优雅解决办法的更多相关文章

  1. Spring3 MVC使用@ResponseBody的乱码问题及解决办法

    近日用Spring3的MVC写东西,深感其之于Webwork/Struts2的便利,但是在通过@ResponseBody这个annotation输出一个json字符串的时候,发现页面上获得的json字 ...

  2. Linux下Oracle中SqlPlus时上下左右键乱码问题的解决办法

    window下的sqlplus可以通过箭头键,来回看历史命令,用起来非常的方便. 但是在Linux下,会出现各种乱码,非常不方便,如下图所示,每次打错一个字符就需要重新打一遍. 解决办法:rlwrap ...

  3. jmete察看结果树和body data乱码问题的解决办法

    jmeter察看结果树乱码问题的解决办法: (1)在jmeter的bin目录下找到jmeter.properties这个文件添加sampleresult.default.encoding=utf-8 ...

  4. [java] bug经验 Unable to locate Spring NamespaceHandler for XML schema namespace解决办法

    报错关键字: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration probl ...

  5. PHP JSON乱码简洁的解决办法

    PHP JSON乱码简洁的解决办法 $arr = array('ret'=>400, 'msg'=>'服务器地址不允许', 'data'=>''); foreach ( $arr a ...

  6. eclipse中js中文乱码问题的解决办法

    在Eclipse中编辑JS文件简直是一种折磨,但是却总是很无奈得要去适应. 这里说一下Eclipse中,编辑JS文件时候,出现中文乱码问题的解决办法. 这个问题很容易想到是文件编码的问题,因此通常是修 ...

  7. (tamcat控制台乱码)在idea中运行toncat后控制台出现乱码的情况解决办法(教程附图)。

    详细教程: (tamcat控制台乱码)在idea中运行toncat后控制台出现乱码的情况解决办法(教程附图)._IT打工酱的博客-CSDN博客

  8. spring mvc 返回乱码SpringMVC使用@ResponseBody注解返回中文字符串乱码的问题

    原文地址:https://www.cnblogs.com/fzj16888/p/5923232.html 先说一下我的经历,以及解决问题的而过程. 在使用SpringMVC的时候,最开始的时候在配置文 ...

  9. Spring @ResponseBody 返回中文乱码问题

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt102 今天在使用spring 的时候,发现中文返回的是乱码. 经过研究发现, ...

随机推荐

  1. Java 参数的和

    public class CommandParamter { public static void main(String[] args) { // TODO Auto-generated metho ...

  2. 如何解决SSH登录Solaris主机速度慢的问题

    SSH登录速度慢可能有多种原因. 1. 与DNS有关 缺省情况下,当客户端用SSH登录solaris服务器时,服务器会试图反向解析客户端的IP 地址(即把IP地址解析成机器名).如果Solaris系统 ...

  3. 11-18网页基础--第二部分CSS样式属性(1)

    第一课:样式属性 style 样式:style样式不仅可以直接在<body>中设置成整个网页的样式.格式:为了将样式.格式多样化,也可以将style单独抽出来,作为一个独立的个体,放在&l ...

  4. 问题:css 自动换行;结果:CSS控制文本自动换行

    CSS控制文本自动换行 CSS控制文本自动换行,阅读CSS控制文本自动换行,1.你定死表格的宽度,即给表格一个宽度值(是 数值,不是百分比) 2.强制不换行div{//white-space:不换行; ...

  5. 监控和安全运维 1.2 cacti安装

    ---恢复内容开始--- 一.安装cacti服务器 1.首先安装epm扩展源 rpm -ivh http://www.lishiming.net/data/attachment/forum/epel- ...

  6. LAMP 2.8 php.ini配置文件详解

    修改php配置文件,但有时候我们并不知道 php.ini 所在路径,这时候就需要通过命令来查一查在哪里. /usr/local/php/bin/php -i |head 看那一行 Loaded Con ...

  7. Tiny4412 Linux 内核配置流程

    1.配置交叉编译器 默认情况下,内核构建的是与宿主机相同的体系架构镜像.如果要交叉编译,需要设置两个变量ARCH和CORSS_COMPILE. ①ARCH:指明目标体系架构,如x86.arm.mips ...

  8. C语言学习笔记--内存操作常见错误

    1. 野指针 (1)指针变量中的值是非法的内存地址,进而形成野指针 (2)野指针不是 NULL 指针,是指向不可用内存地址的指针 (3)NULL 指针并无危害,很好判断,也很好调试 (4)C 语言中无 ...

  9. ffmpeg一揽子

    avformat_alloc_output_context2().在基于FFmpeg的视音频编码器程序中,该函数通常是第一个调用的函数(除了组件注册函数av_register_all()).avfor ...

  10. loader的简单使用过程分析

    首先,fragment或者activity必须实现callback接口 必须实现的三个方法为 public Loader<Cursor> onCreateLoader(int id, Bu ...