我正在将我的项目从旧的 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。我该如何解决?
我找到了解决方案。
在我的映射器界面中:
@ValueMapping(source="ASC", target = "Asc" )
@ValueMapping(source="DESC", target = "Desc" )
SortOrder toModel(com.....model.SortOrder sortOrder);
因为它在 openapi.yml ASC/DESC 中并且库使用 Asc/DES