国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JSP > 正文

springMVC解決ajax請求亂碼的三種方法

2024-09-05 00:18:50
字體:
來源:轉載
供稿:網友

在使用spring MVC進行開發時會遇到這樣那樣的問題,也就是說,AJAX返回的任何中文數據都是亂碼,下面錯新技術頻道告訴你springMVC解決ajax請求亂碼的三種方法,一起來看看吧!

先列出簡單的請求代碼:

瀏覽器端:

<script type="text/javascript">$.ajax({    type: "POST",    url: "/pages/ajax",    data: "name=garfield&age=18",    success: function(data){      console.log(data);   }  })</script>

服務器端:

@ResponseBody@RequestMapping("/ajax")public String ajaxCharacter(){  return "測試";}

web.xml:

<filter>  <filter-name>characterEncodingFilter</filter-name>  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  <init-param><!-- 針對request -->    <param-name>encoding</param-name>    <param-value>UTF-8</param-value>  </init-param>  <init-param><!-- 針對response -->     <param-name>forceEncoding</param-name>    <param-value>true</param-value>  </init-param></filter>

首先,當一個請求到來時,會先經過spring的這個過濾器CharacterEncodingFilter,過濾器設置好編碼之后會進入springmvc的這個DispatcherServlet,通過springmvc的一系列轉化(此處省略。。。),到達我們的控制層,并且幫我們封裝好了參數。在springmvc中配置這個配置項之后<mvc:annotation-driven>,會默認配置RequestMappingHandlerAdapter和HttpMessageConverter,當我們使用@ResponseBody時,那么數據返回時會調用這個數據轉換器。經過查看源碼可知,默認情況下會轉換成ISO-8859-1格式。簡單源碼附上:

public class StringHttpMessageConverter extends AbstractHttpMessageConverter<String> {  public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");  private final Charset defaultCharset;  private final List<Charset> availableCharsets;  private boolean writeAcceptCharset;  protected void writeInternal(String s, HttpOutputMessage outputMessage)      throws IOException {    if (this.writeAcceptCharset) {      outputMessage.getHeaders().setAcceptCharset(getAcceptedCharsets());    }    Charset charset = getContentTypeCharset(outputMessage.getHeaders()        .getContentType());    StreamUtils.copy(s, charset, outputMessage.getBody());  }  ...}public abstract class AbstractHttpMessageConverter<T> implements    HttpMessageConverter<T> {  protected final Log logger = LogFactory.getLog(super.getClass());  private List<MediaType> supportedMediaTypes = Collections.emptyList();  ...}

通過上面的源碼可以看出,對于字符串會自動編碼成默認格式ISO-8859-1,所以對應的就有解決方案。

方案一:

@RequestMapping(value = “/test”,produces=”text/html;charset=UTF-8;”)

方案二:

此注解需要注意的是一定要使用spring 3.1.x 以上。

<mvc:annotation-driven>  <mvc:message-converters register-defaults="true">    <bean class="org.springframework.http.converter.StringHttpMessageConverter">     <property name="supportedMediaTypes" value="text/html;charset=UTF-8"/>    </bean>   </mvc:message-converters> </mvc:annotation-driven>

方案三:

不使用@ResponseBody,將請求處理改成如下:

@RequestMapping("/ajax")public void ajaxCharacter(HttpServletResponse response) throws IOException{  PrintWriter out = response.getWriter();  out.print("測試");  out.close();}上文是錯新技術頻道小編為大家帶來的springMVC解決ajax請求亂碼的三種方法,如果小編介紹的大家還有疑問,或者有錯誤歡迎大家指出。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吉首市| 苏尼特左旗| 南平市| 嘉禾县| 眉山市| 普定县| 察隅县| 牟定县| 合山市| 肃南| 芜湖市| 德安县| 丘北县| 邓州市| 右玉县| 辽宁省| 同江市| 公安县| 金秀| 武冈市| 闻喜县| 桂东县| 奈曼旗| 资源县| 绥滨县| 香港 | 大城县| 南川市| 赞皇县| 嘉兴市| 商丘市| 革吉县| 宜城市| 陆丰市| 深州市| 武冈市| 平塘县| 江都市| 武宣县| 若羌县| 崇明县|