2017-06-02 84 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。