我想添加一個新類型到傑克遜轉換器,它的自定義類型,但它真的只是json和標準對象映射器應該可以將其轉換爲java對象。添加新的媒體類型到Mapping2JacksonHttpMessageConverter
我嘗試以下操作:
@Bean
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter()
{
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
MediaType fhir = new MediaType("application", "json+fhir");
List<MediaType> jacksonTypes = new ArrayList<>(converter.getSupportedMediaTypes());
jacksonTypes.add(fhir);
converter.setSupportedMediaTypes(jacksonTypes);
return converter;
}
當我調試在啓動時,看看支持的類型列表中的應用程序,我可以看到fhir媒體類型在那裏,但我仍然得到同樣的錯誤:
Could not extract response: no suitable HttpMessageConverter found for response type [class MyClass] and content type [application/json+fhir]
我在尋找一些幫助,讓消息轉換器使用此自定義類型。
感謝
**編輯 - 我固定低於此使用Stanislavs答案:
@Bean
RestTemplate restTemplate()
{
RestTemplate restTemplate = new RestTemplate();
List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
messageConverters.add(mappingJackson2HttpMessageConverter());
return restTemplate;
}
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter()
{
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
converter.setObjectMapper(objectMapper);
MediaType fhir = new MediaType("application", "json+fhir");
List<MediaType> jacksonTypes = new ArrayList<>(converter.getSupportedMediaTypes());
jacksonTypes.add(fhir);
converter.setSupportedMediaTypes(jacksonTypes);
return converter;
}
*注*:如果該格式的語法是'json'這'fhir'代表的語義,它的媒體類型應該是'application/hfir + json',它由「MappingJackson2HttpMessageConverter」開箱即用(因爲默認支持'application/* + json')。 – pozs
當我調試類型的數組列表時,我可以看到支持的類型。所以基本上它應該可以正常工作,而不需要我做任何事情? – berimbolo
是的。但OFC,你也需要註冊轉換器(@StanislavL提出了一個有效的點)。 – pozs