How to provide custom ObjectMapper to cosmos client in java azure-cosmos sdk 4?

Viewed 555

cosmos java sdk

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-cosmos</artifactId>
    <version>4.1.0</version>
</dependency>

We want to use custom date format while serialization of POJO to JSON, Currently it is converting to long only. @JsonFormat( ...) can be put on getters to provide date format but it needs to be added to all the fields and there may be requirement of some other customization. What is the way to provide a custom ObjectMapper to cosmos client?

1 Answers

The cosmos converter class looks like this:

public MappingCosmosConverter (
    MappingContext<? extends CosmosPersistentEntity<?>, CosmosPersistentProperty> mappingContext,
    @Qualifier(Constants.OBJECT_MAPPER_BEAN_NAME) ObjectMapper objectMapper) {
    this.mappingContext = mappingContext;
    this.conversionService = new GenericConversionService();
    this.objectMapper = objectMapper == null ? ObjectMapperFactory.getObjectMapper()
        : objectMapper;
}

So if you provide a bean like that:

@Bean
public ObjectMapper cosmosObjectMapper() {
    return ObjectMapperFactory.getObjectMapper();
}

Where the factory is provided by cosmos sdk: com.azure.spring.data.cosmos.core.convert.ObjectMapperFactory then you can customize your object mapper.

Related