您好,登錄后才能下訂單哦!
SpringMvc返回@ResponseBody出現中文亂碼該怎么辦,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
使用SpringMvc的@ResponseBody返回指定數據的類型做為http體向外輸出,在瀏覽器里返回的內容里有中文,會出現亂碼,項目的編碼、tomcat編碼等都已設置成utf-8,如下返回的是一個字符串中文亂碼。
Java代碼
@RequestMapping("user/get_comment_list.do")
public @ResponseBody String getUserCommentList(Integer user_id,Byte type){
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("type", type);
map.put("user_id", user_id);
CommentActPojo actPojo = new CommentActPojo();
List<CommentInfo> list = this.bo.getComList(map);
actPojo.setComments(list);
//System.out.println("數據:"+JsonUtil.toJson(actPojo));//打印數據無中文亂碼
return JsonUtil.toJson(actPojo);
}
SpringMvc使用的版本是3.2.2,后來網上找了一些資料,在@RequestMapping里強制指定返回的數據類型和字符編碼,中文亂碼解決,如下:
Java代碼
@RequestMapping(value="user/get_comment_list.do",produces = "application/json; charset=utf-8")
下載地址 最主流的Java后臺 SSM 框架 springmvc spring mybatis 項目源碼
問題來了,如果項目里有很多類似這樣的請求,每個請求都去配置produces,會很累贅且繁瑣,查看了一下源代碼,發現在spring處理ResponseBody時涉及到org.springframework.http.converter.StringHttpMessageConverter這個類,該類在默認實現中將defaultCharset設為ISO-8859-1。當@RequestMapping標記的方法未配置produces屬性時,將自動使用默認編碼;如果配置了produces屬性,AbstractHttpMessageConverter中的write方法將不會受supportedMediaTypes影響,而用produce設置的header賦值給contenttype。改造一下RequestMappingHandlerAdapter的配置,springMvc.xml如下:
Java代碼
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
<!-- 必須放在<mvc:annotation-driven>之前 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<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>
<value>applicaiton/javascript;charset=UTF-8</value>
</list>
</property>
</bean>
</list>
</property>
</bean>
<!-- 掃描工程文件 -->
<context:component-scan base-package="com.tcl.club.core" />
<context:component-scan base-package="com.cus.back" >
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
</context:component-scan>
<mvc:annotation-driven />
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
<!-- 對模型視圖名稱的解析,即在模型視圖名稱添加前后綴,在requestmapping輸入的地址后自動調用該類進行視圖解析 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
上述springMvc.xml文件重新設置了StringHttpMessageConverter的編碼方式,而不必在每個@RequestMapping里設置produces屬性。如果返回的Jackson類型的數據,可以設置成如下:
Java代碼
<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>
看完上述內容,你們掌握SpringMvc返回@ResponseBody出現中文亂碼該怎么辦的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。