Controller返回json的編碼處理

不久前在Spring mvc的框架體系下,js端發送ajax請求時,獲取的結果爲json時會出現中文亂碼。html

經排查是因爲個人spring3.2.0 配置問題。web

在Controller端返回的json結果須要進行Jackson的處理。ajax

涉及到的jar包:spring

  jackson-core、jackson-databind、jackson-annotationjson

spring-servlet.xml配置添加:api

<mvc:annotation-driven>
        <mvc:message-converters>
            <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>
            <bean
                class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>application/json; charset=UTF-8</value>
                        <value>application/x-www-form-urlencoded; charset=UTF-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

<mvc:annotation-driven>自動註冊:mvc

  org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMappingapp

  org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter框架

因此這兩個bean不用追加到drven裏了。async

StringHttpMessageConverter:
  不只能夠解決中文亂碼,還能夠將json裏的換行|r|n去掉;

MappingJackson2HttpMessageConverter:

  控制@ResponseBody註解返回的json格式。

Controller裏處理代碼以下:  

@RequestMapping(value="myprofile/base.json",method = RequestMethod.GET)
        @ResponseBody
        public String loadSession(Model model,
                @RequestParam("appid")String appid,
                @RequestParam("appkey")String appkey,
                @RequestParam("openid")String openid,
                @RequestParam("pf")String pf,
                @RequestParam("openkey")String openkey,
                HttpServletRequest request,
                HttpServletResponse response){
            response.setHeader("Charset", "UTF-8");
            response.setContentType("application/x-www-form-urlencoded; charset=utf-8");
            
            String serverName =Constant.serverName;
            
            OpenApiV3 apiV3 =new OpenApiV3(appid, appkey);
            
            apiV3.setServerName(serverName);
            String protocol ="http";
            String scriptName="/v3/user/get_info";
            
            String result =getUserInfo(apiV3, scriptName, openid, openkey, protocol,pf);
            
            return result;
        }

Js端請求代碼以下:

 

$j.ajax(
            {
                type: "get",
                async: false,
                url: getUserInfo,
                contentType: "application/x-www-form-urlencoded; charset=utf-8",
                data: {
                        'appid':appid,
                        'appkey':appkey,
                        'openid':openid,
                        'openkey':openkey,
                        'pf':pf
                    },
                dataType: "json",
                cache: false,
                success: function (data) {
                    if(data.ret=='1002'){
                        //登錄失效,需從新登錄
                        fusion2.dialog.relogin();
                    }else{
                        $j("#userinfo").html("用戶信息:<br>"+data);
                    }
                },
                error: function (err) {
                    alert(err);
                }
            }
            
            
            );

 

效果:

相關文章
相關標籤/搜索