spring3.0 @ResponseBody 返回json数据乱码

本文介绍了解决在Spring3.0+Hibernate项目中使用@ResponseBody返回JSON数据时前端页面接收中文出现乱码的问题。提供了两种解决方案:一是升级Spring版本并使用produces注解;二是针对老项目在spring.xml中配置消息转换器。


项目使用:spring3.0+hibernate 

问题描述:使用@ResponseBody 返回json数据时,后台日志打印正常,前端页面接收中文乱码????? ,

解决:

1、如果是新项目可以考虑升级spring为3.1及以上版本,然后 可使用 produces 注解

@RequestMapping(value = "/produces", produces = "application/json"):表示将功能处理方法将生产json格式的数据,此时根据请求头中的Accept进行匹配,如请求头“Accept:application/json”时即可匹配;

2、这个是老项目,不想动看原有版本,最终测试可行的方案:

在spring.xml文件中添加:

<!--编码转换,其默认为ISO-8859-1-->  
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
        <property name="cacheSeconds" value="0" />  
        <property name="messageConverters">  
             <list>  
                 <bean class = "org.springframework.http.converter.StringHttpMessageConverter">  
                    <property name = "supportedMediaTypes">  
                          <list>  
                              <value>application/json;charset=UTF-8</value>  
                         </list>  
                    </property>  
                 </bean>  
            </list>  
        </property>  
    </bean>  
    <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />  



Spring MVC 中,当使用 `@ResponseBody` 注解返回 `String` 类型值时,Spring 会使用 `StringHttpMessageConverter` 来处理响应内容。默认情况下,`StringHttpMessageConverter` 使用的字符集是 `ISO-8859-1` 编码[^3]。这可能导致在返回包含中文字符的字符串时出现乱码问题。 为了解决这个问题,可以通过自定义 `StringHttpMessageConverter` 的字符集为 `UTF-8` 来确保正确处理中文字符。在配置文件中,可以对 `<mvc:annotation-driven>` 标签进行扩展,通过 `<mvc:message-converters>` 配置项替换默认的字符集: ```xml <mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg value="UTF-8" /> </bean> </mvc:message-converters> </mvc:annotation-driven> ``` 通过上述配置,`StringHttpMessageConverter` 将使用 `UTF-8` 字符集对返回的字符串进行编码,从而避免中文乱码问题[^2]。 此外,如果控制器方法返回的是非 `String` 类型的数据(例如 `Map` 或自定义对象),Spring MVC 会自动将其序列化为客户端请求的内容类型,如 JSON 或 XML。例如,如果客户端请求的是 JSON 数据Spring MVC 会将返回值转换为 JSON 格式并返回给客户端[^1]。 ### 示例代码 以下是一个典型的控制器方法示例,展示如何通过 `@ResponseBody` 返回 `String` 类型值: ```java @Controller public class ExampleController { @GetMapping("/greet") @ResponseBody public String greet() { return "你好,世界!"; // 返回的中文字符串 } } ``` 若未配置字符集为 `UTF-8`,客户端可能会接收到乱码的中文响应内容。通过配置 `StringHttpMessageConverter` 使用 `UTF-8` 编码,可以确保返回的字符串在客户端正确显示。 ### 总结 - `@ResponseBody` 返回 `String` 类型时,默认使用 `ISO-8859-1` 编码,可能导致中文乱码。 - 通过配置 `StringHttpMessageConverter` 使用 `UTF-8` 编码,可以解决乱码问题。 - 对于非 `String` 类型的返回值,Spring MVC 会根据客户端请求的内容类型进行序列化。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值