Spring MVC JSON亂碼問題

以前項目中也遇到過返回JSON時亂碼問題,當時找到了一個方法解決了問題可是沒有明白緣由,今天這個項目又遇到了JSON亂碼問題,用以前的方法不行,看了這篇博文才明白爲何html

@RequestMapping的produces方法

第一種解決方案是使用@RequestMapping註解的produces方法。寫法以下:

 

[java]  view plain  copy
 
  1. @RequestMapping(value = 「testPersonalValidtor.do」,produces = 「application/json;charset=utf-8」)  
@RequestMapping(value = "testPersonalValidtor.do",produces = "application/json;charset=utf-8")

在方法上加上這個註解就能夠了。可是這樣寫的話有限制,只能在特定的方法上面使用。若是須要全局都使用的話,須要修改SpringMVC的配置文件。java

 

使用messageConverters

第二種解決辦法是使用HttpMessageConverter接口的相關實現類。咱們先看配置文件中的配置信息。
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" >
        <property name="messageConverters">
            <list>
                <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>
            </list>
        </property>
    </bean>

 

而且須要在Maven依賴中配置上Jackjson的依賴。
   
<dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.13</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-core-asl</artifactId>
            <version>1.9.13</version>
        </dependency>

 

昨天讓我鬱悶的是,我這樣配置了以後確依然是不生效。後來才發現是位置放的不對,須要把這段配置放到<mvc:annotation-driven />的上面。真是很無語的感受!!!
注意:必定要放到<mvc:annotation-driven />的上面,不然不會生效。

使用<mvc:message-converters>

 
     還有一種方式是在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字符串).例子以下:
[java]  view plain  copy
 
@RequestMapping(value = "testPersonalValidtor.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;
        }
    }

 



 




 
參考連接:https://blog.csdn.net/porsche_gt3rs/article/details/79062704
相關文章
相關標籤/搜索