我试图将对象A映射到对象B的列表。我有一个映射器,它从对象A映射到对象B。
欢迎所有建议。下面是显示问题的代码示例。
你好,德克兰
// SPECIESTOLOGSPECY.JAVA
// From this mapper I want to call SpecyToLogDeclarationMapperApi mapper
// to map ‘species’ to ‘logdeclarations’ which is a list of logdeclaration
// you can see want I am trying to do in the aftermapping method
// where I map species to logdeclaration and then put this into a list
// unfortunately I need other mapping components (ConfigMapperFromCode & SpecyToFishDeclarationMapperApi)
// to be autowired into SpecyToLogDeclarationMapperApi and this is not happening.
// is there another way to get a handle to the spring managed
// SpecyToLogDeclarationMapperApi mapper ?
@Mapper(componentModel="spring",
uses = {
ConfigMapperFromCode.class,
GeoInfoMapper.class,
SpecyToLogDeclarationMapperApi.class
})
public interface SpeciesToLogSpecy {
SpecyToLogDeclarationMapperApi MAPPER = Mappers.getMapper(SpecyToLogDeclarationMapperApi.class);
@Mappings(
{
@Mapping(target="createdate", expression = "java(java.sql.Timestamp.valueOf(java.time.LocalDateTime.now()))"),
@Mapping(target="speciesid", qualifiedByName={"ConfigMapperFromCode", "speciesIdFromCodeAsDecimal"}, source = "species.speciesCode"),
@Mapping(target="unitweight", constant = "1"),
@Mapping(target = "inactiveind", constant = "N"),
@Mapping(target = "unitdefaultind", constant = "Y"),
@Mapping(target = "sectiontypeid", expression = "java(new BigDecimal(ie.gov.agriculture.fisheries.logsheet.mapping.constants.MappingConstants.LOG_SPECIES_SECTION_TYPE_SHEETDECLARATION))"),
@Mapping(target = "unituomid", expression = "java(new BigDecimal(ie.gov.agriculture.fisheries.logsheet.mapping.constants.MappingConstants.LOGSHEET_CATCHUNITS_KG))"),
@Mapping(target="catchtypeid", qualifiedByName={"ConfigMapperFromCode", "returnCatchTypeId"}, source = "species.spType"),
@Mapping(target="legalfishsizetypeid", qualifiedByName={"ConfigMapperFromCode", "legalFishSizeTypeIdFromCode"}, source = "species.fishSizeClass"),
@Mapping(target="presenttypeid", qualifiedByName={"ConfigMapperFromCode", "presentationTypeIdFromCode"}, source = "species.presentation.presentationType"),
//@Mapping(target="logdeclarations", source = "species")
}
)
Logspecy speciesToLogspecy(Species species, @Context ExtraFields extraFields);
@AfterMapping
default void afterMap(@MappingTarget Logspecy logspecy, @Context ExtraFields extraFields){
Logdeclaration logDeclaration = MAPPER.SpeciesToLogDeclarations(species, extraFields);
List<Logdeclaration> logdeclarations = new ArrayList<Logdeclaration>();
logdeclarations.add(logDeclaration);
logSpecy.setLogdeclarations(logdeclarations);
{
// SPECYTOLOGDECLARATIONMAPPERAPI.JAVA
@Mapper(componentModel="spring",
uses = {
ConfigMapperFromCode.class,
SpecyToFishDeclarationMapperApi.class
}
)
public interface SpecyToLogDeclarationMapperApi {
@Mappings(
{
@Mapping(target="createdate", expression = "java(java.sql.Timestamp.valueOf(java.time.LocalDateTime.now()))"),
@Mapping(target="geartypeid", qualifiedByName={"ConfigMapperFromCode", "gearIdFromCode"}, source = "species.gearType"),
@Mapping(target="fishcount", source = "species.qty"),
@Mapping(target = "inactiveind", constant = "N"),
@Mapping(target="packagetypeid", qualifiedByName={"ConfigMapperFromCode", "packagingTypeIdFromCode"}, source = "species.presentation.packaging"),
@Mapping(target="packagecount", source = "species.presentation.pkgunit"),
@Mapping(target="avgpackageweight", source = "species.presentation.pkgUnitWeight"),
@Mapping(target="conversionfactor", source = "species.presentation.convFactor"),
@Mapping(target="fishdeclaration", source = "species.geoInfo")
}
)
Logdeclaration SpeciesToLogDeclarations (Species species, @Context ExtraFields extraFields);
问题是,您试图将物种
映射到列表
,而MapStruct找不到这样的映射方法。为了使其工作,您可以将以下方法添加到specytologdeclarationmapperapi
:
default List<Logdeclaration> SpeciesToLogDeclarationsToList(Species species, @Context ExtraFields extraFields) {
if ( species == null ) {
return null;
}
Logdeclaration logDeclaration = SpeciesToLogDeclarations(species, extraFields);
List<Logdeclaration> logdeclarations = new ArrayList<Logdeclaration>();
logdeclarations.add(logDeclaration);
return logdeclarations;
}
这是一些其他的事情,我认为您可以改进代码并“更正确地”使用MapStruct:
默认值
映射器#getmapper(Class)
的用法
mapper#imports
,MapStruct将在实现中导入它们。例如。
@Mapping(target="fishcount", source = "species.qty")
可以是
@Mapping(target="fishcount", source = "qty")
下面是我的DTO。 源DTO 目标DTO
假设我有这样的映射: 现在,我需要将子列表映射到子列表,但它们都有相同的父对象。我希望这样做: 但不管用,有机会做吗?
给定: 我想把所有的车都标出来。将轮胎分为单独的轮胎板。我知道我可以做一个
我试图使用MapStruct在dto和实体对象之间映射convert,但是生成的映射器实现只返回空的映射对象。 BeermapperImpl 任何人都可以提供我的代码可能出错的地方?谢谢!
我有如下目标实体: 源对象如下所示:
假设我有以下课程:
问题内容: 我们有一张有很多列的大桌子。移至MySQL Cluster后,由于以下原因无法创建表: 错误1118(42000):行大小太大。不包括BLOB在内的已使用表类型的最大行大小为14000。这包括存储开销,请查阅手册。您必须将某些列更改为TEXT或BLOB 举个例子: 这是用于存储配置参数的表。我在想,我们可以将一些列合并为一个列,并将其存储为JSON对象,然后将其转换为Java对象。 例
我需要将多个dto映射到实体。几乎所有的dto都有一个指向另一个dto的引用,我不知道在映射dto时如何传递引用。 以下是该地址的一个业务实现: 这是地图绘制者 所有实现者都从同一个dto读取,然后将它们映射到dto和entites。 以下是针对客户实施的建议: 以及我希望引用映射地址实体的映射(我的客户实体有一个地址类型字段)。 非常感谢你。