zoukankan      html  css  js  c++  java
  • springmvc返回中文乱码问题

    关于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("  ", "
    data:"));
    8         this.ssePrettyPrinter = prettyPrinter;
    9     }

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

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

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

       

  • 相关阅读:
    7天入门JavaScript,第一天
    linux 下 启动web项目报 java.net.UnknownHostException
    HashMap 和 Hashtable
    Servlet 两种跳转方式
    SpringMVC
    把当前时间(NSDate)转为字符串
    写入数据到Plist文件中时,第一次要创建一个空的数组,否则写入文件失败
    实现多个UIView之间切换的动画效果
    missing required architecture x86_64 in file 不支持64位
    获取IOS bundle中的文件
  • 原文地址:https://www.cnblogs.com/ljy-20180122/p/9535551.html
Copyright © 2011-2022 走看看