2017-06-02 54 views
0

我正在調用一個REST端點,它在響應主體中返回基本的JSON,但Content-Type響應頭設置爲application/javascript。Spring Boot - HttpMessageConverter JSONP(application/javascript)

這裏是我的標準RestTemplate豆:

RestTemplateBuilder restBuilder = new RestTemplateBuilder(); 
    return restBuilder.setConnectTimeout(connectTimeout) 
      .setReadTimeout(readTimeout) 
      .build(); 

當我做這個模板默認的轉換器無法處理響應getForObject要求,我得到異常:

org.springframework。 web.client.RestClientException:無法提取響應:找不到適用於響應類型[class MyResponseObj]和內容類型[application/javascript]的HttpMessageConverter

是否有一些快速配置可以添加到我的RestTemplate中以處理此響應並在通常的轉換之前?

此刻,我的工作就是將響應轉換爲字符串而不是我的域對象,然後用ObjectMapper手動創建對象,但感覺有點髒。

回答

0

,你應該能夠做的是定製HttpMessageConverter與應用程序/ JavaScript的媒體類型的工作:https://dzone.com/articles/customizing

像這樣的事情可能會奏效,但我沒有測試這一點:

@Bean 
    public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() { 
     MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter(); 
     jsonConverter.getSupportedMediaTypes().add(new MediaType("application/javascript")); 

     return jsonConverter; 
    } 

現在我重點調整了RestController而不是RestTemplate。如果它不能正常工作的,而不是使用一個bean,你可以手動創建轉換器對象並設置RestTemplate對象的HttpMessageConverters:

restTemplate.getMessageConverters().add(jsonConverter); 

的關鍵是要有正確的轉換器映射到正確的媒體類型,在你的情況下application/javascript。