忽略子对象,除了专门映射的属性
Ignore child object except specifically-mapped properties
有没有办法配置 MapStruct 映射以忽略子对象,但仍将特定 属性 映射到子对象上?
例如:
@Mapper
interface PersonMapper {
@Mapping(target = "organization", ignore = true) // ignore organization
@Mapping(source = "organizationId", target = "organization.id") // except organization.id
Person toEntity(PersonModel model);
}
这样,目标 organization
是非空的,并且具有从源的 organizationId
字段设置的 id
字段。目前,这种方法似乎优先考虑被忽略的子 organization
而 属性 被保留为 null
.
注意:我希望在不必实现自定义映射方法(例如,仅使用注释)的情况下执行此操作。
目前,如果不添加带有注释的额外映射方法,则无法实现您正在寻找的内容。
什么时候
@Mapping(target = "organization", ignore = true)
然后使用 ,无论您对 organization
的嵌套映射做什么,整个 属性 organization
都会被忽略。
但是,如果您执行以下操作,您可以获得所需的内容:
@Mapper
interface PersonMapper {
@Mapping(target = "organization", source = "model"
Person toEntity(PersonModel model);
@BeanMaping(ignoreByDefault = true)
@Mapping(target = "id", source = "organizationId")
Organization toOrganizationEntity(PersonModel model)
}
我们刚才做了什么:
- 我们添加了一个自定义
toOrganizationEntity
模型,从 PersonModel
到 Organization
- 我们说过我们正在将模型的源参数(从 toEntity)映射到组织中
- 我们将忽略
toOrganizationEntity
中目标映射的所有属性
- 我们明确地将
organizationId
映射到 Organization
的 id
。
如果您不想在 PersonMapper
接口上公开 public 方法,您可以改用抽象 class。
@Mapper
public class PersonMapper {
@Mapping(target = "organization", source = "model"
public abstract Person toEntity(PersonModel model);
@BeanMaping(ignoreByDefault = true)
@Mapping(target = "id", source = "organizationId")
protected abstract Organization toOrganizationEntity(PersonModel model)
}
有没有办法配置 MapStruct 映射以忽略子对象,但仍将特定 属性 映射到子对象上?
例如:
@Mapper
interface PersonMapper {
@Mapping(target = "organization", ignore = true) // ignore organization
@Mapping(source = "organizationId", target = "organization.id") // except organization.id
Person toEntity(PersonModel model);
}
这样,目标 organization
是非空的,并且具有从源的 organizationId
字段设置的 id
字段。目前,这种方法似乎优先考虑被忽略的子 organization
而 属性 被保留为 null
.
注意:我希望在不必实现自定义映射方法(例如,仅使用注释)的情况下执行此操作。
目前,如果不添加带有注释的额外映射方法,则无法实现您正在寻找的内容。
什么时候
@Mapping(target = "organization", ignore = true)
然后使用 ,无论您对 organization
的嵌套映射做什么,整个 属性 organization
都会被忽略。
但是,如果您执行以下操作,您可以获得所需的内容:
@Mapper
interface PersonMapper {
@Mapping(target = "organization", source = "model"
Person toEntity(PersonModel model);
@BeanMaping(ignoreByDefault = true)
@Mapping(target = "id", source = "organizationId")
Organization toOrganizationEntity(PersonModel model)
}
我们刚才做了什么:
- 我们添加了一个自定义
toOrganizationEntity
模型,从PersonModel
到Organization
- 我们说过我们正在将模型的源参数(从 toEntity)映射到组织中
- 我们将忽略
toOrganizationEntity
中目标映射的所有属性
- 我们明确地将
organizationId
映射到Organization
的id
。
如果您不想在 PersonMapper
接口上公开 public 方法,您可以改用抽象 class。
@Mapper
public class PersonMapper {
@Mapping(target = "organization", source = "model"
public abstract Person toEntity(PersonModel model);
@BeanMaping(ignoreByDefault = true)
@Mapping(target = "id", source = "organizationId")
protected abstract Organization toOrganizationEntity(PersonModel model)
}