RestTemplate報錯:no suitable HttpMessageConverter found for request type

某天試用RestTemplate調試,瀏覽器直接提示:
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Fri Dec 01 14:49:26 CST 2017
There was an unexpected error (type=Internal Server Error, status=500).
Could not write request: no suitable HttpMessageConverter found for request type [org.springframework.util.LinkedMultiValueMap] and content type [application/x-www-form-urlencoded;charset=UTF-8]

查看後臺是RestTemplate模板異常:
org.springframework.web.client.RestClientException: Could not write request: no suitable HttpMessageConverter found for request type [org.springframework.util.LinkedMultiValueMap] and content type [application/x-www-form-urlencoded;charset=UTF-8]

異常提示已經很明顯了,原因是由於我的post方法使用了MultiValueMap<String, Object>來封裝參數,但是無法找到合適的類型轉換,仔細查看我的RestTemplate對象獲取方式是如下的:
     public static RestTemplate getInstance(String charset) {
          StringHttpMessageConverter m = new StringHttpMessageConverter(Charset.forName(charset));
          RestTemplate restTemplate = new RestTemplateBuilder().additionalMessageConverters(m).build();
          return restTemplate;
     }


其實問題就出現在上面這段代碼上面,我使用了RestTemplateBuilder來創建RestTemplate對象,該方式只會爲restTemplate模板初始化一個HttpMessageConverter(注:StringHttpMessageConverter間接實現HttpMessageConverter接口)



再比較直接 new RestTemplate()創建對象的方式


找到原因所在,可以不使用RestTemplateBuilder創建對象來避免這個異常,爲此對getInstance方法改造成以下的形式:
    public static RestTemplate getInstanceByCharset(String charset) {
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.getMessageConverters().add(new StringHttpMessageConverter(Charset.forName(charset)));
        return restTemplate;
    }
後臺不再報錯,問題完美解決!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章