2017-04-20 84 views
0

我想添加一個新類型到傑克遜轉換器,它的自定義類型,但它真的只是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; 
} 
+0

*注*:如果該格式的語法是'json'這'fhir'代表的語義,它的媒體類型應該是'application/hfir + json',它由「MappingJackson2HttpMessageConverter」開箱即用(因爲默認支持'application/* + json')。 – pozs

+0

當我調試類型的數組列表時,我可以看到支持的類型。所以基本上它應該可以正常工作,而不需要我做任何事情? – berimbolo

+0

是的。但OFC,你也需要註冊轉換器(@StanislavL提出了一個有效的點)。 – pozs

回答

1

猜猜你的轉換器未正確註冊。我認爲傑克遜單獨添加轉換器,而你的bean只是被忽略。

the example

只需創建擴展MappingJackson2HttpMessageConverter 你的轉換器類,並像其註冊該

<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager"> 
    <mvc:message-converters register-defaults="true"> 
     <bean class="com.example.MyMappingJackson2HttpMessageConverter"/> 
    </mvc:message-converters> 
</mvc:annotation-driven> 
+0

儘管我已閱讀關於spring引導的內容,但您完全正確,我調試了其餘模板知道的所有消息轉換器,並確實與其他一些jackson轉換器實例進行了連線。謝謝 – berimbolo