mapstruct转换list指定使用某个转换方法
时间: 2023-08-13 12:04:59 浏览: 238
如果你想在将一个 `List` 转换成另一个 `List` 的过程中,使用某个特定的映射方法来进行转换,可以使用 MapStruct 提供的 `@IterableMapping` 注解。
举个例子,假设我们有两个类 `Source` 和 `Target`:
```java
public class Source {
private String name;
private int age;
// getter/setter
}
public class Target {
private String fullName;
private int yearsOld;
// getter/setter
}
```
现在我们有一个 `List<Source>`,我们希望使用一个名为 `sourceToTargetWithName` 的映射方法将其中的对象转换成 `Target` 对象,我们可以定义一个映射方法:
```java
@Mapper
public interface SourceTargetMapper {
@Mapping(source = "name", target = "fullName")
@Mapping(source = "age", target = "yearsOld")
Target sourceToTargetWithName(Source source);
@IterableMapping(nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT, elementTargetType = Target.class)
List<Target> sourceListToTargetListWithName(List<Source> sourceList);
}
```
在上面的代码中,我们使用 `@Mapping` 注解来指定将 `Source` 的 `name` 属性映射到 `Target` 的 `fullName` 属性,将 `Source` 的 `age` 属性映射到 `Target` 的 `yearsOld` 属性。然后我们定义了一个 `sourceListToTargetListWithName` 方法,该方法使用 `@IterableMapping` 注解来标记这是一个 `List` 类型的映射方法,并且使用 `elementTargetType` 属性来指定要转换成的目标类型。在方法内部,我们使用 `stream()` 方法遍历 `List`,然后对每个对象使用 `sourceToTargetWithName()` 方法进行转换。
需要注意的是,我们需要将 `@IterableMapping` 注解的 `nullValueMappingStrategy` 属性设置为 `NullValueMappingStrategy.RETURN_DEFAULT`,否则在转换过程中,如果某个对象不符合转换条件,会将其转换成 `null`,从而导致 `NullPointerException`。
阅读全文