gpt4 book ai didi

java - 使用 MapStruct 映射枚举字段

转载 作者:行者123 更新时间:2023-12-04 09:37:50 26 4
gpt4 key购买 nike

我想映射 2 个模型,每个模型都有几乎相同的枚举。让我展示:

第一个模型有枚举:

public enum EventSource {
BETRADAR("SOURCE_BETRADAR"),
BETGENIUS("SOURCE_BETGENIUS"),
BETCONSTRUCT("SOURCE_BETCONSTRUCT"),
MODEL("SOURCE_MODEL");

第二个模型有枚举:
public enum SportEventSource implements ProtocolMessageEnum {
SOURCE_UNKNOWN(0),
SOURCE_BETRADAR(1),
SOURCE_BETGENIUS(2),
SOURCE_BETCONSTRUCT(3),
UNRECOGNIZED(-1);

我有这样的自定义映射方法:
@Named("eventSourceConverter")   
default EventSource eventSourceConverter(SportEventSource source) {
switch (source) {
case SOURCE_MODEL:
return EventSource.MODEL;
case SOURCE_BETCONSTRUCT:
return EventSource.BETCONSTRUCT;
case SOURCE_BETGENIUS:
return EventSource.BETGENIUS;
case SOURCE_BETRADAR:
return EventSource.BETRADAR;
default:
return EventSource.MODEL;
}
}

然后我使用:
  @Mapping(target = "mainSource", source = "source", qualifiedByName = "eventSourceConverter")
AdapterCompetitor protoToModel(Competitor proto);

但是得到:
error: The following constants from the property "SportEventSource source" enum have no corresponding constant in the "*source*" enum and must be mapped via adding additional mappings: SOURCE_UNKNOWN, SOURCE_BETRADAR, SOURCE_BETGENIUS, SOURCE_BETCONSTRUCT, UNRECOGNIZED.
AdapterCompetitor protoToModel(Competitor proto);

我还创建了枚举映射器,例如:
  @ValueMappings({
@ValueMapping(source = "SOURCE_BETRADAR", target = "BETRADAR"),
@ValueMapping(source = "SOURCE_BETGENIUS", target = "BETGENIUS"),
@ValueMapping(source = "SOURCE_BETCONSTRUCT", target = "BETCONSTRUCT"),
@ValueMapping(source = "SOURCE_MODEL", target = "MODEL"),
@ValueMapping(source = "SOURCE_UNKNOWN", target = "MODEL"),
@ValueMapping(source = "UNRECOGNIZED", target = "MODEL")
})
EventSource eventSourceToSportEventSource(SportEventSource source);

但我不需要单独拥有它,只希望枚举字段将映射到内部映射中。简单地说——当我做 AdapterCompetitor protoToModel(Competitor proto) enum 也应该被映射。

谢谢!

p.s.对不起我的工程师,希望我的问题有意义:)

最佳答案

这可以使用 @ValueMapping 来实现

关于java - 使用 MapStruct 映射枚举字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62472215/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com