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

2023-11-27

有没有一种简单的方法可以将 spring data couchbase 与没有的文档一起使用_class属性? 在沙发底座上我有类似的东西sampledata bucket:

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

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

就像是: 如果type字段的值为“mydata”,使用类 MyData.java。 所以当执行find而不是自动添加时AND _class = "mydata"向生成的查询添加AND type = "mydata".


Spring Data 一般需要_class字段以了解反序列化时要实例化的内容。

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

但默认情况下它仍然期望那里有一个完全限定的类名

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

  1. 你需要实现你自己的CouchbaseTypeMapper,遵循模型DefaultCouchbaseTypeMapper。在里面super(...)构造函数,您需要提供一个附加参数:的列表TypeInformationMapper。默认实现没有明确提供一个,因此SimpleTypeInformationMapper用的就是放FAN的那个。
  2. 有一个可配置的替代实现,因此您可以通过以下方式将特定类别名为更短的名称Map: ConfigurableTypeInformationMapper...
  3. 所以通过放一个ConfigurableTypeInformationMapper使用您想要的特定类的别名 + aSimpleTypeInformationMapper在列表中的后面(如果您序列化了一个没有提供别名的类),您就可以实现您的目标。
  4. The typeMapper被用在MappingCouchbaseConverter,不幸的是,您还需要扩展它(只是为了实例化您的typeMapper而不是默认值。
  5. 完成后,再次覆盖配置以返回自定义的实例MappingCouchbaseConverter使用您的自定义CouchbaseTypeMapper (the mappingCouchbaseConverter()方法)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在没有 _class 属性的情况下将 spring 数据与 couchbase 一起使用 的相关文章

随机推荐