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