mapstruct对象属性映射如何不用ignore实现只映射部分属性
时间: 2023-07-20 14:19:11 浏览: 52
在 MapStruct 中,如果需要显示地指定某些属性之间的映射关系,同时又不需要映射其他属性,可以使用 `@Mapping` 注解来指定需要映射的属性,同时使用 `@InheritInverseConfiguration` 注解和另外一个方法来指定反向映射。具体来说,可以定义两个方法,一个用于正向映射,另一个用于反向映射。在正向映射方法中使用 `@Mapping` 注解指定需要映射的属性,同时在反向映射方法中使用 `@InheritInverseConfiguration` 注解引用正向映射方法。
例如,假设有两个类 `Source` 和 `Target`,它们有相同的属性名但类型不同,同时还有一个额外的属性 `extra`:
```java
public class Source {
private int id;
private String name;
private String extra;
// getters and setters
}
public class Target {
private long id;
private String name;
// getters and setters
}
```
可以使用以下 MapStruct 映射接口将 `Source` 类型的对象转换为 `Target` 类型的对象,同时只映射 `id` 和 `name` 属性:
```java
@Mapper
public interface SourceTargetMapper {
@Mappings({
@Mapping(source = "id", target = "id"),
@Mapping(source = "name", target = "name")
})
Target sourceToTarget(Source source);
@InheritInverseConfiguration
Source targetToSource(Target target);
}
```
在上面的例子中,`@Mappings` 注解用于指定多个属性之间的映射关系。其中,`@Mapping(source = "id", target = "id")` 和 `@Mapping(source = "name", target = "name")` 分别表示将 `Source` 类型的对象的 `id` 和 `name` 属性值映射到 `Target` 类型的对象的 `id` 和 `name` 属性上。另外,`@InheritInverseConfiguration` 注解表示反向映射时继承正向映射的配置,这样可以避免重复配置。因此,当调用 `sourceToTarget()` 方法时,MapStruct 会自动执行这个映射。同时,当调用 `targetToSource()` 方法时,MapStruct 会根据 `sourceToTarget()` 方法中的配置自动执行反向映射。