Controller返回json的編碼處理


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

經排查是由於我的spring3.2.0 配置問題。

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

涉及到的jar包:

  jackson-core、jackson-databind、jackson-annotation

spring-servlet.xml配置添加:

<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>自動注冊:

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

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

所以這兩個bean不用追加到drven里了。

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);
                }
            }
            
            
            );

 

效果:








 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM