Objects which are not manage by Spring and use "new ObjectMapper()" instead of autowiring it, will still face that issue.
I was facing this issue while configuring a MappingJackson2MessageConverter to use with JMS, so in this case I had to set the ObjectMapper explicitly to the MappingJackson2MessageConverter object, as shown below.
@Bean
public MessageConverter messageConverter(){
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
converter.setTargetType(MessageType.TEXT);
converter.setTypeIdPropertyName("_type");
converter.setObjectMapper(objectMapper());
return converter;
}
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
return objectMapper;
}
Additionally, we can also add the @Bean annotation on top of the
objectMapper method, this way Spring managed objects will use this
mapper instead.
In case there is already an ObjectMapper managed by Spring, we can just inject the ObjectMapper in the messageConvert, like below.
@Bean
public MessageConverter messageConverter(ObjectMapper objectMapper)
{
MappingJackson2MessageConverter converter = new
MappingJackson2MessageConverter();
converter.setTargetType(MessageType.TEXT);
converter.setTypeIdPropertyName("_type");
converter.setObjectMapper(objectMapper);
return converter;
}