【问题标题】:Spring Data Elasticsearch 4 - Override Object Mapper?Spring Data Elasticsearch 4 - 覆盖对象映射器?
【发布时间】:2021-03-15 23:33:45
【问题描述】:

之前在 Spring Data Elasticsearch 的第 3 版中,默认使用 Jackson 映射器,但可以覆盖以使用 Metamodel 对象映射器,如下所述:

https://docs.spring.io/spring-data/elasticsearch/docs/3.2.0.RC1/reference/html/#elasticsearch.mapping.meta-model

我了解 Jackson 映射器已在版本 4 中被删除并替换为 Metamodel 对象映射器,如下所述:

https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#elasticsearch.mapping

但似乎覆盖对象映射器的能力也被删除了。确实没有办法将 Elasticsearch 全局对象映射器配置为再次使用 Jackson(或任何其他映射器)?失去该选项提供的灵活性似乎是一种耻辱。

【问题讨论】:

    标签: java spring elasticsearch spring-data spring-data-elasticsearch


    【解决方案1】:

    没有。 MappingConverter 不仅用于实体与 JSON 之间的转换,而且还用于转换和映射字段名、日期格式和其他内容,例如在创建 CriteriaQuerys 或处理高亮等搜索结果时。 Spring Data Elasticsearch 中有一些地方需要实体的映射信息,而 Jackson 不能在那里使用。

    因此,在 4.0 之前的版本中,有必要在实体上使用 jackson-annotations 和其他具有不同注释的东西自定义 Jackson,这已被合并。

    您需要哪些 MappingConverter(元模型映射器的实现)无法与自定义转换器结合使用的功能?

    编辑 05.12.2020

    来自 cmets 的有效点:应该可以为实体定义 FieldNamingStrategy。我创建了an issue for that

    【讨论】:

    • 感谢您的快速回复! Jackson 提供的关键功能是定义属性命名策略。在我的用例中,我们的 API 是蛇式,但 POJO 是骆驼式,Jackson 让我们可以轻松地在格式之间进行映射,而无需在注释中指定每个字段的名称。
    • 所以您可以使用 Jackson 将 POJO 转换为您的 API 表示,这与 Spring Data Elasticsearch 如何映射数据有什么关系?
    • 我很抱歉我应该解释更多,我们使用 Elasticsearch 的目的完全是为了 API 过滤。我们正在将参数字符串转换为匹配查询以从 ES 中检索结果。由于我们所有的文档都使用驼峰式字段进行索引,因此在传递过滤器参数时我们无法使用我们的 API 字段名称。如果我们也可以配置 ES 以使用 API 表示来索引我们的文档,那么它将无缝地协同工作。否则,我们正在考虑必须将 @Field 注释添加到我们所有 POJO 的数百个字段中,以便与 API 名称匹配。
    • 我创建了一个将 FieldNamingStrategy 添加到 Spring Data Elasticsearch 的问题
    • 非常感谢!感谢您的回复,并期待 FieldNamingStrategy 的支持!
    猜你喜欢
    • 2017-01-19
    • 1970-01-01
    • 2016-12-18
    • 2017-05-18
    • 1970-01-01
    • 2019-03-27
    • 2021-12-12
    • 2021-06-10
    • 2014-07-21
    相关资源
    最近更新 更多