fee*_*ood 8 java enums spring-boot mapstruct
我想映射 2 个模型,其中每个模型都有几乎相同的枚举。让我展示:
\n\n第一个模型有枚举:
\n\npublic enum EventSource {\n BETRADAR("SOURCE_BETRADAR"),\n BETGENIUS("SOURCE_BETGENIUS"),\n BETCONSTRUCT("SOURCE_BETCONSTRUCT"),\n MODEL("SOURCE_MODEL");\nRun Code Online (Sandbox Code Playgroud)\n\n第二个模型有枚举:
\n\npublic enum SportEventSource implements ProtocolMessageEnum {\n SOURCE_UNKNOWN(0),\n SOURCE_BETRADAR(1),\n SOURCE_BETGENIUS(2),\n SOURCE_BETCONSTRUCT(3),\n UNRECOGNIZED(-1);\nRun Code Online (Sandbox Code Playgroud)\n\n我有这样的自定义映射方法:
\n\n@Named("eventSourceConverter") \ndefault EventSource eventSourceConverter(SportEventSource source) {\n switch (source) {\n case SOURCE_MODEL:\n return EventSource.MODEL;\n case SOURCE_BETCONSTRUCT:\n return EventSource.BETCONSTRUCT;\n case SOURCE_BETGENIUS:\n return EventSource.BETGENIUS;\n case SOURCE_BETRADAR:\n return EventSource.BETRADAR;\n default:\n return EventSource.MODEL;\n } \n}\nRun Code Online (Sandbox Code Playgroud)\n\n然后我使用:
\n\n @Mapping(target = "mainSource", source = "source", qualifiedByName = "eventSourceConverter")\n AdapterCompetitor protoToModel(Competitor proto);\nRun Code Online (Sandbox Code Playgroud)\n\n但得到:
\n\nerror: 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.\n AdapterCompetitor protoToModel(Competitor proto);\nRun Code Online (Sandbox Code Playgroud)\n\n我还创建了枚举映射器,例如:
\n\n @ValueMappings({\n @ValueMapping(source = "SOURCE_BETRADAR", target = "BETRADAR"),\n @ValueMapping(source = "SOURCE_BETGENIUS", target = "BETGENIUS"),\n @ValueMapping(source = "SOURCE_BETCONSTRUCT", target = "BETCONSTRUCT"),\n @ValueMapping(source = "SOURCE_MODEL", target = "MODEL"),\n @ValueMapping(source = "SOURCE_UNKNOWN", target = "MODEL"),\n @ValueMapping(source = "UNRECOGNIZED", target = "MODEL")\n })\n EventSource eventSourceToSportEventSource(SportEventSource source);\nRun Code Online (Sandbox Code Playgroud)\n\n但我不需要单独拥有它,只是希望枚举字段将在内部映射中映射。当我这样做时,简单地说 \xe2\x80\x94AdapterCompetitor protoToModel(Competitor proto)枚举时, \xe2\x80\x94 也应该被映射。
谢谢!
\n\nPS 对我的工程师感到抱歉,希望我的问题有意义:)
\nfee*_*ood -1
我用了
@Mapper(componentModel = "spring")
public interface ConverterMapper {
@Named("UnitValueConverter")
default Long unitValueConverter(UInt64Value value) {
return value.getValue();
}
Run Code Online (Sandbox Code Playgroud)
作为一个包含上面所有命名映射器的接口,然后我做
@Mapper(componentModel = "spring")
public interface EventMapper extends ConverterMapper
Run Code Online (Sandbox Code Playgroud)
问题是我没有在ConverterMapper接口中添加@Mapper注解
| 归档时间: |
|
| 查看次数: |
48831 次 |
| 最近记录: |