用于MongoDB和Redis的Java串行化器和反串行化器

n9vozmp4  于 2023-01-29  发布在  Java
关注(0)|答案(1)|浏览(161)

在过去,我使用Jackson注解@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);

将伪对象存储到DB中,我希望看到存储为String的变量
货币"1.234,56"
事件日期"2023年1月25日"
当我查询数据库时,我希望那些字符串被转换回它们的类型。
这样,我就可以为每个字段使用特定的模式。
任何关于这方面的文档/教程都将非常感谢。

ars1skjm

ars1skjm1#

在Springboot中,我们使用了RedisTemplate来连接运行在云中的redis示例。RedisTemplate在spring配置中被配置为一个自定义bean。在那里,你可以选择添加一个自定义的序列化器/反序列化器。我们使用了spring的GenericJackson 2 JsonRedisSerializer,这个序列化器在序列化字符串中包含对象的类型名称,这将在反序列化过程中有所帮助。
如果要在序列化和反序列化过程中添加任何自定义逻辑,可以扩展此类并重写相应的方法。
然后可以使用以下代码将自定义序列化程序添加到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,我相信可以使用定制转换器来应用类似的概念。
下面的示例代码展示了如何在spring中的mongo配置中配置定制转换器

@Override
  public MongoCustomConversions customConversions() {
    List<Converter<?, ?>> converters = new ArrayList<Converter<?, ?>>();
    converters.add(new CustomConverter());
    return new MongoCustomConversions(converters);
}

请参阅以下连结以获取更多有关相同的资料

相关问题