gpt4 book ai didi

java - 如何在没有_class属性的情况下将spring数据与couchbase一起使用

转载 作者:搜寻专家 更新时间:2023-11-01 01:32:16 25 4
gpt4 key购买 nike

有没有一种简单的方法可以将 spring data couchbase 用于没有 _class 属性的文档?在 couchbase 我的 sampledata 桶中有这样的东西:

{
"username" : "alice",
"created" : 1473292800000,
"data" : { "a": 1, "b" : "2"},
"type" : "mydata"
}

现在,有什么方法可以定义从这种文档结构到 Java 对象的映射(请注意 _class 属性丢失且无法添加),反之亦然,以便我得到所有(或大部分) ) 来自 spring couchbase 数据的自动功能?

类似于:如果 type 字段的值为“mydata”,则使用 MyData.java 类。因此,当执行查找而不是自动添加 AND _class = "mydata" 到生成的查询时,添加 AND type = "mydata"

最佳答案

Spring Data 通常需要 _class 字段来知道在反序列化时要实例化什么。

通过覆盖 AbsctractCouchbaseDataConfiguration 中的 typeKey() 方法,在 Spring Data Couchbase 中使用与 _class 不同的字段名称相当容易.

但默认情况下它仍会期望其中有一个完全限定的类名

解决这个问题需要做更多的工作:

  1. 您需要按照 DefaultCouchbaseTypeMapper 模型实现您自己的 CouchbaseTypeMapper。在 super(...) 构造函数中,您需要提供一个额外的参数:TypeInformationMapper 列表。默认实现没有明确提供一个,因此使用了 SimpleTypeInformationMapper,这是放置 FQN 的那个。
  2. 还有一个可配置的替代实现,因此您可以通过 Map 将特定类别名为更短的名称:ConfigurableTypeInformationMapper...
  3. 因此,通过在列表中放置一个 ConfigurableTypeInformationMapper 和你想要的特定类的别名+一个 SimpleTypeInformationMapper (如果你序列化了一个你没有序列化的类'提供一个别名),你可以实现你的目标。
  4. typeMapperMappingCouchbaseConverter 中使用,不幸的是您还需要扩展它(只是为了实例化您的 typeMapper 而不是默认。
  5. 完成后,再次覆盖配置以返回使用自定义 CouchbaseTypeMapper 的自定义 MappingCouchbaseConverter 实例(mappingCouchbaseConverter() 方法)。

关于java - 如何在没有_class属性的情况下将spring数据与couchbase一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38847605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com