springmvc返回中文乱码问题

博客主要讨论SpringMVC返回中文乱码问题的解决办法。有局部和全局两种处理方式,对于返回值为String或JSON类型都有对应方案。Spring 4.3及后续版本处理JSON默认用UTF - 8,不同返回值类型和版本的配置有所不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于springmvc的返回中文乱码的问题,网上可谓是清一色的一样,无外乎就两种,要么在局部类或这方法上解决,类似如下的代码:

1 @GetMapping(value="/error/query",produces="text/json;charset=utf-8")
2     public String getMessage(){
3         return "增加对字符编码限制";
4     }

另一种方式是在springmvc.xml中配置对应的全局参数,类似下面列举的部分:

 1       <mvc:message-converters>
 2             <bean class="org.springframework.http.converter.StringHttpMessageConverter">
 3                 <property name="supportedMediaTypes">
 4                     <list>
 5                         <value>text/plain;charset=utf-8</value>
 6                         <value>text/html;charset=UTF-8</value>
 7                     </list>
 8                 </property>
 9             </bean>
10         </mvc:message-converters>

当然上面列举的这个是针对返回值为string类型,对于返回json类型的处理方式是一样的,只不过spring4.3对于json处理默认的编码方式使用的是UTF-8,这个我们可以通过springmvc对json处理类MappingJackson2HttpMessageConverter以及父类AbstractJackson2HttpMessageConverter中可以看到,具体源代码的

1 public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
2 
3 protected void init(ObjectMapper objectMapper) {
4         this.objectMapper = objectMapper;
5         setDefaultCharset(DEFAULT_CHARSET);
6         DefaultPrettyPrinter prettyPrinter = new DefaultPrettyPrinter();
7         prettyPrinter.indentObjectsWith(new DefaultIndenter("  ", "\ndata:"));
8         this.ssePrettyPrinter = prettyPrinter;
9     }

代码是我截取了部分的源码,所以说如果你使用的spring4.3及后续版本,且返回值为json,如果全局配置,只需要在xml中配置<mvc:annotation-driven /> 即可,中文不会乱码;如果返回值是String类型,如果全局配置,则需要如小编上面的配置即可。

对于局部的处理,则还是使用produces的charset=UTF-8来实现。

     当然也有很多小伙伴用的是spring4.3之前的版本,由于之前版本对于json的处理使用的是MappingJacksonHttpMessageConverter小编没下载源码,所以没有去研究,但是对于返回值为String类型的处理方式没有变。

   

 

转载于:https://www.cnblogs.com/ljy-20180122/p/9535551.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值