в прошлом я использовал аннотацию Джексона под названием @JsonSerialize и @JsonDeserialize для сериализации java-объекта в json и наоборот:
public class Dummy {
@JsonSerialize(using = CustomNumberSerializer.class)
@JsonDeserialize(using = CustomNumberDeserializer.class)
public BigDecimal money;
@JsonSerialize(using = CustomDateSerializer.class)
@JsonDeserialize(using = CustomDateDeserializer.class)
public Date eventDate;
}
и это работает отлично, как я хочу.
Теперь мне интересно, есть ли альтернатива, которая выполняет ту же работу, но во время вызовов баз данных, таких как MongoDB и Redis.
Так, например:
BigDecimal money = new BigDecimal("1234.56");
Date eventDate = new Date();
Dummy dummy = new Dummy(money, eventDate);
Сохраняя фиктивный объект в БД, я хочу видеть переменные, хранящиеся как String
деньги "1.234,56"
Дата события "25.01.2023"
когда я запрашиваю базу данных, я хочу, чтобы эти строки были преобразованы обратно в их тип.
Таким образом, я могу использовать определенный шаблон для каждого поля.
Любая документация/учебник по этому поводу будет очень признательна.
В Springboot мы использовали RedisTemplate для подключения к экземпляру Redis, работающему в облаке. RedisTemplate настроен как пользовательский компонент в конфигурации spring. Там у вас есть возможность добавить собственный сериализатор/десериализатор. Мы использовали Spring GenericJackson2JsonRedisSerializer, этот сериализатор включает имена типов объектов в сериализованную строку, и это поможет во время десериализации.
Если вы хотите добавить какую-либо пользовательскую логику во время сериализации и десериализации, вы можете расширить этот класс и переопределить соответствующие методы.
Затем пользовательский сериализатор можно добавить в шаблон Redis, используя следующий код.
@Bean
public RedisTemplate<String, Map<String, Object>> redisTemplateStandAlone(LettuceConnectionFactory redisConnectionFactory) {
GenericJackson2JsonRedisSerializer serializer = new GenericJackson2JsonRedisSerializer();
RedisTemplate<String, Map<String, Object>> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.setKeySerializer(serializer);
redisTemplate.setValueSerializer(serializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
Я считаю, что в случае с Mongo DB аналогичная концепция может быть применена с использованием пользовательских конвертеров.
В следующем примере кода показано, как настроить пользовательские преобразователи в вашей конфигурации mongo весной.
@Override
public MongoCustomConversions customConversions() {
List<Converter<?, ?>> converters = new ArrayList<Converter<?, ?>>();
converters.add(new CustomConverter());
return new MongoCustomConversions(converters);
}
пожалуйста, обратитесь к следующим ссылкам для получения дополнительной информации о том же