Сериализатор и десериализатор Java для MongoDB и Redis

в прошлом я использовал аннотацию Джексона под названием @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"

когда я запрашиваю базу данных, я хочу, чтобы эти строки были преобразованы обратно в их тип.
Таким образом, я могу использовать определенный шаблон для каждого поля.

Любая документация/учебник по этому поводу будет очень признательна.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В 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);
}

пожалуйста, обратитесь к следующим ссылкам для получения дополнительной информации о том же

Другие вопросы по теме