1. 程式人生 > >Spring org.springframework.web.client.RestTemplate亂碼

Spring org.springframework.web.client.RestTemplate亂碼

@spring version 4.2.3

  • RestTemplate 例項化時需要HTTPMessageConverters
RestTemplate(List<HttpMessageConverter<?>> messageConverters)
Create a new instance of the RestTemplate using the given list of HttpMessageConverter to use
  • 因我需要HTTPMessageConverters的實現類:StringHttpMessageConverter,所以接下來是用這個來舉例,先給幾個HTTPMessageConverters的實現類,官網上也有說明:
All Known Implementing Classes:
AbstractGenericHttpMessageConverter, AbstractHttpMessageConverter, AbstractJackson2HttpMessageConverter, AbstractJaxb2HttpMessageConverter, AbstractWireFeedHttpMessageConverter, AbstractXmlHttpMessageConverter, AllEncompassingFormHttpMessageConverter, AtomFeedHttpMessageConverter, BufferedImageHttpMessageConverter, ByteArrayHttpMessageConverter, FormHttpMessageConverter, GsonHttpMessageConverter, Jaxb2CollectionHttpMessageConverter, Jaxb2RootElementHttpMessageConverter, MappingJackson2HttpMessageConverter, MappingJackson2XmlHttpMessageConverter, MarshallingHttpMessageConverter, ObjectToStringHttpMessageConverter, ProtobufHttpMessageConverter, ResourceHttpMessageConverter, RssChannelHttpMessageConverter, SourceHttpMessageConverter, StringHttpMessageConverter, XmlAwareFormHttpMessageConverter
  • 記下來說StringHttpMessageConverter
    見官網:
Constructor Summary

Constructors
Constructor and Description
StringHttpMessageConverter()
A default constructor that uses "ISO-8859-1" as the default charset.
StringHttpMessageConverter(Charset defaultCharset)
A constructor accepting a default charset to use
if the requested content type does not specify one

有兩個建構函式,如果使用第一個,spring預設使用第一個,那麼我們編碼就是ISO,
所以我們需要使用第二個。

  • 先用傳統程式碼來實現:
import java.nio.charset.Charset;
import java.util.List;

import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;

import com.google.common.collect.Lists;

public class RestTemplateCover extends RestTemplate{
    public RestTemplateCover() {
        List<HttpMessageConverter<?>> messages = Lists.newArrayList();
        StringHttpMessageConverter converter = new StringHttpMessageConverter(Charset.forName("UTF-8"));
        messages.add(converter);
        this.setMessageConverters(messages);
    }
}

spring servlet.xml中加入:

<bean id = "restTemplate" class="xxx.xxx.xx.RestTemplateCover"></bean>
  • 但是這種方式太麻煩,還要改了然後再加入。何不必直接使用xml(其實真實原因是因為本人xml不行,下面的xml配置弄了半天才出來的):
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
    <property name="messageConverters">   
       <list>   
           <bean class = "org.springframework.http.converter.StringHttpMessageConverter">   
              <constructor-arg type="java.nio.charset.Charset">
                    <value>UTF-8</value>
              </constructor-arg> 
           </bean>
       </list>   
    </property>
</bean>

總結

  • 經過這次對這個RestTemplate亂碼問題的處理,對問題處理的認知也有了自己的想法。
    1.不要急,先百度下,如果百度不到,翻看原始碼。
    2.翻看原始碼,仔細的觀察會使什麼原因導致的。比如這次是因為charset導致的。我們在看RestTemplate的時候很輕易的可以找到messageConverters是導致亂碼的原因(總共就幾個建構函式)。
    http://docs.spring.io/spring/docs/current/javadoc-api/
    從HttpMessageConverter的實現類中選取自己需要的: StringHttpMessageConverter。
    它的建構函式有設定編碼的方法。從而達到目的。

  • 知識積累:
    某類用建構函式,而我們需要對有引數的進行注入:

<bean class="xxx.java">
    <constructor-arg value="xxx"/>  
</bean>

相關推薦

Spring org.springframework.web.client.RestTemplate亂碼

@spring version 4.2.3 RestTemplate 例項化時需要HTTPMessageConverters RestTemplate(List<HttpMessag

org.springframework.web.client.RestTemplate 無法載入

解決方案; 在啟動函式中加入 @Bean public RestTemplate restTemplate(ClientHttpRequestFactory factory){ return new RestTemplate(factory); } @Bea

【SpringBoot】RestTemplate呼叫報錯:'org.springframework.web.client.RestTemplate' that could not be found.

    RestTemplate引入方式為:@Autowiredpublic RestTemplate restTemplate; 時報錯,錯誤資訊如下錯誤:'org.springframework.web.client.RestTemplate' that could n

Consider defining a bean of type 'org.springframework.web.client.RestTemplate' in your configuration

如題,在springcloud開發中,當我們將RestTemplate通過@Autowired註解注入到一個類中,啟動服務報錯。 在springboot1.3版本中會預設提供一個RestTemplate的例項Bean,當在springboot1.4以及以後的版本中,需要手動

org.springframework.web.client.HttpServerErrorException: 500 null

span fault temp post using erro 發現 obj 客戶 在使用RestTemplate 的時候,微服務沒有發生錯誤,只是執行時間較長2018-05-03 16:57:02.916 INFO 14456 --- [o-10002-exec-11]

com.springframework.web.client.RestTemplate

1.建兩個pojo(實體類),一個是UpdateUserRqst,是send出去的json的那個實體類。一個是UpdateUserResp,用來接受json變成的類。 public class UpdateUserResp{ String result; get set

spring MVC 報錯:java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet

重新 chain http1 accesslog instance report ppc springmvc bstr 嚴重: Allocate exception for servlet SpringMVCjava.lang.ClassNotFoundExceptio

spring配置問題:嚴重: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener

manager base class spring配置 r.java 配置 enc contain app 將項目發布到tomcat時出現下面錯誤 嚴重: Error configuring application listener of class org.springf

Maven+spring 報錯:Error configuring application listener of class org.springframework.web.cont

Maven+spring 報錯:Error configuring application listener of class org.springframework.web.cont   錯誤資訊: SEVERE: Error configuring application

eclispe中建立maven專案使用spring報java.lang.ClassNotFoundException: org.springframework.web.filter.Charact

報錯如下: 資訊: Starting Servlet Engine: Apache Tomcat/7.0.57 九月 24, 2018 6:44:04 下午 org.apache.catalina.util.SessionIdGenerator createSecureRa

spring boot 上傳檔案出錯:org.springframework.web.multipart.MultipartException: Could not parse multipart s

一個國慶假期回來,測試跟我說以前好好的檔案上傳不能用了,還是真實環境,程式報如下錯誤: org.springframework.web.multipart.MultipartException: Cou

Spring的初始化:org.springframework.web.context.ContextLoaderListener

在web.xml中配置 <listener>     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> <

spring實戰之坑:配置MongoDB出錯org.springframework.web.context.ContextLoader.initWebApplicationContext Conte

org.springframework.web.context.ContextLoader.initWebApplicationContext Context initialization failedjava.lang.BootstrapMethodError: java.

IDEA 下spring mvc 等web 程式啟動報錯找不到類:org.springframework.web.context.ContextLoaderListener等問題

當初看見這個以為自己那個地方出現了什麼毛病。所以多建立了幾個程式,卻發現一直都是啟動不了啟動失敗22-Mar-2018 19:50:30.426 嚴重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.Sta

Spring boot(16) spring boot 線上故障 上傳檔案出錯:org.springframework.web.multipart.MultipartException: Could

上線後,過了一段時間上傳檔案的時候 出現錯誤 org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception

使用spring mvc 4.2.x.jar ClassNotFoundException:org.springframework.web.cors.CorsConfigurationSource

使用spring mvc的包時,如果選擇了4.2.x及以上版本,在控制器中呼叫RequestMapping("")註解時 啟動Tomcat報錯:ClassNotFoundException:org.springframework.web.cors.CorsConfigura

關於intellij載入spring框架java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderL

環境:intellij 15 ,Spring 3.1 本來新建了一個springMVC的專案,動都沒動,點開tomcat,卻發現tomcat啟動出了問題。 異常就是java.lang.ClassNotFoundException: org.springframework.w

java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

frame rtu tex catalina 導入 listen 前言 intern 初步 前言:   MyEclipse整合ssh框架,間歇性Tomcat啟動發生java.lang.ClassNotFoundException: org.springframework.w

web.xml】報錯java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

sch display ldr cep .class apache blog man reload 今天搭建新的項目,雖然在web.xml中配置了ContextLoaderListener以及IntrospectorCleanupListener 如下: web.xml中部

java.lang.ClassNotFoundException: org.springframework.web.content.ContextLoaderListener

pla nag sdn fonts b2c dsm exc span fontsize 1、錯誤描寫敘述嚴重: Error configuring application listener of class org.springframework.web.content