解决Spring中ResponseBody返回中文乱码问题

来源:互联网 发布:雪梨有几个淘宝店铺 编辑:程序博客网 时间:2024/05/21 11:06

1.在xml中配置HttpMessageConverter


使用HttpMessageConverter接口的相关实现类。我们先看配置文件中的配置信息。

<!--处理请求返回json字符串的中文乱码问题-->    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" >        <property name="messageConverters">            <list>                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />                <bean class="org.springframework.http.converter.StringHttpMessageConverter">                    <property name="supportedMediaTypes">                        <list>                            <value>text/plain;charset=utf-8</value>                            <value>text/html;charset=UTF-8</value>                        </list>                    </property>                </bean>            </list>        </property>    </bean>



并且需要在Maven依赖中配置上Jackjson的依赖。

<properties>    <jackson.databind-version>2.6.5</jackson.databind-version>    <spring.version>4.1.3.RELEASE</spring.version></properties><!--jackson--><dependency>    <groupId>com.fasterxml.jackson.core</groupId>    <artifactId>jackson-databind</artifactId>    <version>${jackson.databind-version}</version></dependency><dependency>    <groupId>com.fasterxml.jackson.core</groupId>    <artifactId>jackson-core</artifactId>    <version>${jackson.databind-version}</version></dependency><dependency>    <groupId>com.fasterxml.jackson.core</groupId>    <artifactId>jackson-annotations</artifactId>    <version>${jackson.databind-version}</version></dependency>

注意:一定要放到<mvc:annotation-driven />的上面,否则不会生效。


2.使用<mvc:message-converter>



     还有一种方式是在SpringMVC的配置文件中的<mvc:annotation-driven>中加入<mvc:message-converters>的配置。具体配置内容如下:
<!-- SpringMVC注解驱动 -->  <mvc:annotation-driven>      <mvc:message-converters>          <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>          <bean class="org.springframework.http.converter.StringHttpMessageConverter">              <property name="supportedMediaTypes">                  <list>                      <value>text/plain;charset=utf-8</value>                      <value>text/html;charset=UTF-8</value>                  </list>              </property>          </bean>      </mvc:message-converters>  </mvc:annotation-driven>  



注意:始用这种配置的时候,需要去掉RequestMappingHandlerMapping、RequestMappingHandlerAdapter或者DefaultAnnotationHandlerMapping、AnnotationMethodHandlerAdapter的Bean配置,要不然可能会不生效。

另外:对于请求映射处理类返回类型可以是String也可以是Object(如果Object是JavaBean的话,SpringMVC会用Jackson来转换成json字符串).例子如下:

//直接返回对象  @RequestMapping(value = "testValidtor.do") @ResponseBody  public Object testPersonalValidtor(@Valid PersonScope personScope, BindingResult bindingResult){      if(bindingResult.hasErrors()){          StringBuffer sb = new StringBuffer();          for(ObjectError objectError : bindingResult.getAllErrors()){              sb.append(((FieldError)objectError).getField() +" : ").append(objectError.getDefaultMessage());          }          return sb.toString();      }else{          return personScope;      }  }  


阅读全文
0 0