SpringMVC中解決@ResponseBody注解返回中文亂碼問(wèn)題
昨天在做項(xiàng)目的時(shí)候用@ResponseBody注解,發(fā)現(xiàn)返回頁(yè)面上的中文是亂碼,解決過(guò)程也是讓我很郁悶?。?!特此記錄一些。目前有下面幾種解決方案:
@RequestMapping的produces方法
第一種解決方案是使用@RequestMapping注解的produces方法。寫(xiě)法如下:
@RequestMapping(value = "testPersonalValidtor.do",produces = "application/json;charset=utf-8")
在方法上加上這個(gè)注解就可以了。但是這樣寫(xiě)的話有限制,只能在特定的方法上面使用。如果需要全局都使用的話,需要修改SpringMVC的配置文件。
使用messageConverters
第二種解決辦法是使用HttpMessageConverter接口的相關(guān)實(shí)現(xiàn)類(lèi)。我們先看配置文件中的配置信息。
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" >
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
<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>
</list>
</property>
</bean>
并且需要在Maven依賴(lài)中配置上Jackjson的依賴(lài)。
<dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.9.13</version> </dependency>
昨天讓我郁悶的是,我這樣配置了之后確依然是不生效。后來(lái)才發(fā)現(xiàn)是位置放的不對(duì),需要把這段配置放到<mvc:annotation-driven />的上面。真是很無(wú)語(yǔ)的感覺(jué)!?。?br />
注意:一定要放到<mvc:annotation-driven />的上面,否則不會(huì)生效。
使用<mvc:message-converters>
還有一種方式是在SpringMVC的配置文件中的<mvc:annotation-driven>中加入<mvc:message-converters>的配置。具體配置內(nèi)容如下:
<!-- SpringMVC注解驅(qū)動(dòng) -->
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
<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>
</mvc:message-converters>
</mvc:annotation-driven>
注意:始用這種配置的時(shí)候,需要去掉RequestMappingHandlerMapping、RequestMappingHandlerAdapter或者DefaultAnnotationHandlerMapping、AnnotationMethodHandlerAdapter的Bean配置,要不然可能會(huì)不生效。
另外:對(duì)于請(qǐng)求映射處理類(lèi)返回類(lèi)型可以是String也可以是Object(如果Object是JavaBean的話,SpringMVC會(huì)用Jackson來(lái)轉(zhuǎn)換成json字符串).例子如下:
@RequestMapping(value = "testPersonalValidtor.do")
@ResponseBody
//直接返回對(duì)象
public Object testPersonalValidtor(@Valid PersonScope personScope, BindingResult bindingResult){
if(bindingResult.hasErrors()){
StringBuffer sb = new StringBuffer();
for(ObjectError objectError : bindingResult.getAllErrors()){
sb.append(((FieldError)objectError).getField() +" : ").append(objectError.getDefaultMessage());
}
return sb.toString();
}else{
return personScope;
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java中對(duì)list元素進(jìn)行排序的方法詳解
這篇文章主要介紹了Java中對(duì)list元素進(jìn)行排序的方法詳解,是Java入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09
Java如何獲取HttpServletRequest請(qǐng)求參數(shù)
我們常需要接口接收第三方推送的數(shù)據(jù),由于第三方可能不具備開(kāi)發(fā)能力,我們需要自行解析推送的數(shù)據(jù)格式,通過(guò)HttpServletRequest,我們可以解析字符串、JSON、XML以及文件等多種數(shù)據(jù)類(lèi)型,本文介紹了如何在Java中使用HttpServletRequest獲取請(qǐng)求參數(shù),感興趣的朋友一起看看吧2024-11-11
解決Request獲取請(qǐng)求數(shù)據(jù)中文亂碼問(wèn)題
這篇文章主要介紹了Request獲取請(qǐng)求數(shù)據(jù)中文亂碼問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
Java獲取視頻時(shí)長(zhǎng)及截取幀截圖詳解
這篇文章主要介紹了Java獲取視頻時(shí)長(zhǎng)及截取幀截圖詳解,以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。,需要的朋友可以參考下2019-06-06
Java實(shí)現(xiàn)常用加密算法——單向加密算法MD5和SHA
本篇文章主要介紹了Java實(shí)現(xiàn)常用加密算法——單向加密算法MD5和SHA,信息加密后數(shù)據(jù)更安全,需要的朋友可以參考下。2016-10-10
java使用spring實(shí)現(xiàn)發(fā)送mail的方法
這篇文章主要介紹了java使用spring實(shí)現(xiàn)發(fā)送mail的方法,涉及java基于spring框架發(fā)送郵件的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
前端存token后端獲取token代碼實(shí)例(Spring?Boot)
Token其實(shí)就是訪問(wèn)資源的憑證,一般是用戶通過(guò)用戶名和密碼登錄成功之后,服務(wù)器將登陸憑證做數(shù)字簽名,加密之后得到的字符串作為token,這篇文章主要給大家介紹了關(guān)于前端存token,Spring?Boot后端獲取token的相關(guān)資料,需要的朋友可以參考下2024-07-07

