Elasticsearch REST High API 客户端与 Java Api 客户端之间的 SortOrder 映射问题

问题描述 投票:0回答:1

我正在将我的项目从旧的 Elasticsearch REST High Client 迁移到新的 Java Api 客户端。我使用 Openapi 生成器和 Mapstruct。

在openapi.yml中

    SortOrder:
      enum:
        - ASC
        - DESC
      type: string
      default: DESC

在我的映射器界面中

SortOrder toModel(com....model.SortOrder sortOrder);

如果我将 SortOrder 切换到新的 Java Api 客户端,我会收到此错误:

错误:源枚举中的以下常量在目标枚举中没有对应的常量,必须通过添加附加映射进行映射:ASC、DESC。 SortOrder toModel(com....model.SortOrder sortOrder);

当我检查类 co.elastic.clients.elasticsearch._types.SortOrder 时,它说:

 Asc("asc"),
 Desc("desc");

但旧的是:org.elasticsearch.search.sort.SortOrder

 ASC {
        public String toString() {
            return "asc";
        }

        public int reverseMul() {
            return 1;
        }

        public <T> Comparator<T> wrap(Comparator<T> delegate) {
            return delegate;
        }
    },
    DESC {
        public String toString() {
            return "desc";
        }

        public int reverseMul() {
            return -1;
        }

        public <T> Comparator<T> wrap(Comparator<T> delegate) {
            return delegate.reversed();
        }
    };

我认为问题在于新库使用 Asc/DES 而不是 ASC/DESC。我该如何解决?

elasticsearch mapstruct openapi-generator resthighlevelclient elasticsearch-java-api-client
1个回答
0
投票

我找到了解决方案。

在我的映射器界面中:

@ValueMapping(source="ASC", target = "Asc" )
@ValueMapping(source="DESC", target = "Desc" )
SortOrder toModel(com.....model.SortOrder sortOrder);

因为它在 openapi.yml ASC/DESC 中并且库使用 Asc/DES

© www.soinside.com 2019 - 2024. All rights reserved.