不久前在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); } } );
效果: