我想使用返回的 RESTful 服务text/javascript
内容类型。
由于没有 OOTBHttpMessageConverter
可以在 Spring Boot 中执行此操作,我想注册一个自定义转换器。
我发现做到这一点的一种方法是自定义RestTemplate
本身通过修改MappingJackson2HttpMessageConverter
:
@Component
public class CustomRestTemplateProvider {
public RestTemplate getCustomRestTemplate(MediaType mediaType) {
MappingJackson2HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter();
jacksonConverter.setSupportedMediaTypes(Collections.singletonList(mediaType));
List<HttpMessageConverter<?>> converters = new ArrayList<>();
converters.add(jacksonConverter);
return new RestTemplate(converters);
}
}
然后,在我的服务中,只需致电getCustomRestTemplate(new MediaType("text", "javascript")
上面的解决方案工作正常,但我也尝试创建一个新的转换器来处理这种媒体类型,根据Spring Boot 文档 (27.1.2):
所以我创建了一个新的转换器:
@Component
public class TextJavascriptMessageConverter extends AbstractJackson2HttpMessageConverter {
public TextJavascriptMessageConverter(ObjectMapper objectMapper) {
super(objectMapper);
setTextJavascriptAsSupportedMediaType();
}
private void setTextJavascriptAsSupportedMediaType() {
List<MediaType> supportedMediaTypes = new ArrayList<>();
supportedMediaTypes.add(new MediaType("text", "javascript"));
setSupportedMediaTypes(supportedMediaTypes);
}
}
然后尝试像文档中那样注册它:
@Configuration
public class ApplicationConfiguration {
@Bean
public HttpMessageConverters customConverters() {
HttpMessageConverter<Object> converter = new TextJavascriptMessageConverter(new ObjectMapper());
return new HttpMessageConverters(Collections.singletonList(converter));
}
}
尽管如此,我还是收到一条消息说Could not extract response: no suitable HttpMessageConverter found for response type [class example.MyResponsee] and content type [text/javascript]
我什至尝试延长MappingJackson2HttpMessageConverter
,但这也不起作用。我缺少什么?另外,为此创建一个新的转换器是一个很好的做法,还是可以接受修改现有的转换器(就像我在第一个示例中所示的那样)?