如何在没有_class属性的情况下使用带有couchbase的spring数据
作者:互联网
有没有一种简单的方法将spring数据couchbase与没有_class属性的文档一起使用?
在沙发基地里,我的采样数据库中有这样的东西:
{
"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字段来知道反序列化时要实例化的内容.
通过覆盖AbsctractCouchbaseDataConfiguration中的typeKey()方法,Spring Data Couchbase中使用与_class不同的字段名称相当容易.
但它仍然期望默认情况下在那里有完全限定的类名
绕过这将需要更多的工作:
>您需要按照DefaultCouchbaseTypeMapper的模型实现自己的CouchbaseTypeMapper.在super(…)构造函数中,您需要提供一个额外的参数:TypeInformationMapper列表.默认实现没有显式提供一个,因此使用SimpleTypeInformationMapper,它是放置FQN的那个.
>还有一个可配置的替代实现,因此您可以通过Map:ConfigurableTypeInformationMapper将特定类别名为更短的名称…
3.因此,通过将ConfigurableTypeInformationMapper与特定类所需的别名放在列表中的SimpleTypeInformationMapper之后(对于您序列化未提供别名的类的情况),您可以实现目标.
>在MapCobaseConverter中使用了typeMapper,不幸的是你还需要扩展它(只是为了实例化你的typeMapper而不是默认值).
>完成后,再次覆盖配置以返回使用自定义CouchbaseTypeMapper(mappingCouchbaseConverter()方法)的自定义MappingCouchbaseConverter的实例.
标签:couchbase,java,spring-data,spring-data-couchbase 来源: https://codeday.me/bug/20190727/1554306.html