[英]Java Mapstruct generic enum converter
我有兩個不同的枚舉類,其中一個將它們用作一個值
public enum Type{
TEST1{
@Override
public Type convertToINT() {
return Type.INTEGRATION1;
}
},
TEST2{
@Override
public Type convertToINT() {
return Type.INTEGRATION2;
}
},
TEST3{
@Override
public TypeIntegration convertToINT(){
return Type.INTEGRATION3;
}
};
public abstract TypeIntegration convertToINT();
}
public enum TypeIntegration {
INTEGRATION1,
INTEGRATION2,
INTEGRATION3
}
例如,這個枚舉在不同的類中使用;
@Getter
@Setter
public class typeSaveReqDto{
private blabla;
private blabla;
private Type type;
}
@Getter
@Setter
public class typeIntegrationObject{
private blabla;
private blabla
private TypeIntegration type;
}
我想使用 mapstructs 並通過自動生成的類進行轉換,但 mapstruct 向我拋出異常,例如“屬性“類型類型”枚舉中的以下常量在“類型集成類型”枚舉中沒有對應的常量,必須通過添加附加映射來映射:TEST1、TEST2、TEST3"
我想創建用於轉換枚舉的 EnumMapper 類,如何使用 mapStructs java 編寫通用類?
編輯 :
我生成了 EnumMapper
@Mapper
public class EnumMapper {
EnumMapper INSTANCE = Mappers.getMapper(EnumMapper.class);
@Named("enumToIntEnum")
public static <T extends EnumConverter<INT>,INT> INT convertToINT(T enums, @TargetType INT enumClass){
INT convertObj = ((T)enums).convertToINT();
return convertObj;
}
}
和 Mapper 接口如下
@Mapper(componentModel = "spring",uses = EnumMapper.class)
public interface TypeReqMapper {
@Mapping(source = "type" , target = "type",qualifiedByName = "enumToIntEnum")
public TypeIntegrationObject typeSaveReqDtoTotypeIntegrationObject(TypeSaveReqDto typeSaveReqDto);
}
但是我遇到了一個失敗,比如“無法將屬性“類型類型”映射到“類型集成類型”。 考慮聲明/實現一個映射方法:“TypeIntegration map(Type value)”。
類型T
未知且不包含convertToINT
方法,因為它可以是任何東西。 所以保持簡單,只寫一個專用的映射器,而不是嘗試構建一個可以做所有事情的映射器。
@Mapper(componentModel="spring")
public class TypeToTypeIntegrationMapper {
@Mapping
public TypeIntegration map(Type from) {
return from.convertToINT();
}
}
不要讓它變得更復雜。
您甚至可以放棄映射器並改為編寫expression
。
@Mapper(componentModel = "spring",uses = EnumMapper.class)
public interface TypeReqMapper {
@Mapping(source = "type" , target = "type", expression = "java(type.convertToINT())")
public TypeIntegrationObject typeSaveReqDtoTotypeIntegrationObject(TypeSaveReqDto typeSaveReqDto);
}
MapStruct 現在將使用表達式來生成映射代碼,而不必自己編寫映射器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.