我需要从公开银行课程映射到我的核心课程。我正在与mapstruct
合作。我需要将多个枚举字段映射到核心类中的一个。但是我认为mapstruct不支持映射多个字段。有什么棘手的方法或解决方案吗?
提前致谢!
这是我从开放银行获得的枚举值:
public enum Category {
TRANS_AND_SAVINGS_ACCOUNTS("TRANS_AND_SAVINGS_ACCOUNTS"),
REGULATED_TRUST_ACCOUNTS("REGULATED_TRUST_ACCOUNTS"),
CRED_AND_CHRG_CARDS("CRED_AND_CHRG_CARDS"),
PERS_LOANS("PERS_LOANS"),
MARGIN_LOANS("MARGIN_LOANS"),
PROPERTY_LOANS("PROPERTY_LOANS"),
TRADE_FINANCE("TRADE_FINANCE"),
OVERDRAFTS("OVERDRAFTS"),
BUSINESS_LOANS("BUSINESS_LOANS"),
RESIDENTIAL_MORTGAGES("RESIDENTIAL_MORTGAGES");
...
}
这是我的核心课程:
public enum Type{
CHARGES( "Charges" ),
CREDITS( "Credits" ),
ALL_LOANS( "AllLoans" ),
MORTGAGE( "Mortgage" ),
OTHER( "Other" ),
PREPAIDCARD( "PrePaidCard" ),
SAVINGS( "Savings" );
...
}
我有一个valueMapping
,如下所示(这是错误的):
public interface TypeMapper {
@ValueMappings( {
@ValueMapping(source = "CHARGES", target= "CRED_AND_CHRG_CARDS"),
@ValueMapping(source = "CREDITS", target= "CRED_AND_CHRG_CARDS"),
@ValueMapping(source = "ALL_LOANS", target = "PERS_LOANS"),
@ValueMapping(source = "ALL_LOANS", target = "MARGIN_LOANS"),
@ValueMapping(source = "ALL_LOANS", target = "BUSINESS_LOANS"),
@ValueMapping(source = "ALL_LOANS", target = "PROPERTY_LOANS"),
@ValueMapping(source = "MORTGAGE", target= "RESIDENTIAL_MORTGAGES"),
@ValueMapping(source = "OTHER", target= "OVERDRAFTS"),
@ValueMapping(source = "PREPAIDCARD", target = MappingConstants.NULL),
@ValueMapping(source = "SAVINGS", target = "TRANS_AND_SAVINGS_ACCOUNTS")
} )
...
}
它不接受将PERS_LOANS("PERS_LOANS"), MARGIN_LOANS("MARGIN_LOANS"), PROPERTY_LOANS("PROPERTY_LOANS")
映射到ALL_LOANS
。我想知道是否有一种方法可以将所有3个映射到一个字段。也许可以在@AfterMapping
中涵盖它,有什么建议吗?而且我想将所有未映射的值映射到核心类中的OTHER
。
答案 0 :(得分:0)
您必须自己实现它,因为MapStruct不支持它。尝试将@qualifiedByName
注释与您自己的方法一起使用
例如:
public interface TypeMapper{
@Mapping(target= "CRED_AND_CHRG_CARDS", qualifiedByName = "creditAndChrgCardsMapping")
public Type CategoryToType(Category category);
default String qualifiedByName (String charges, String credits){
//Implement your business logic for example
return charges + credits;
}
}
答案 1 :(得分:0)
在您的问题中,您说不能将PERS_LOANS
,MARGIN_LOANS
等映射到ALL_LOANS
。但是,您的值映射是相反的。您正在将ALL_LOANS
映射到PERS_LOANS
。
不可能将一个枚举(源)值映射到多个枚举(目标)值。但是,可以将多个枚举(源)值映射到相同的枚举(目标)值。