【问题标题】:How mapping to List<> with mapstruct如何使用 mapstruct 映射到 List<>
【发布时间】:2018-05-07 04:38:50
【问题描述】:

您好,我需要 mappig 变量来请求。我如何映射到列表中。 我的请求看起来像。

public class Request {
    private String Id;
    private List<Data> applicationData;

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Data {
        private String data1;
        private String data2;
        private String data3;
    }
}

还有我的映射器

@Mapper(componentModel = "spring")
public abstract class RequestMapper {
    @Mapping(target = "Id", source = "data.Id")
    @Mapping(target = "data.???.data1", source = "data.data1")
    @Mapping(target = "data.???.data2", source = "data.data2")
    @Mapping(target = "applicationData.???.data3", source = "data.data3")
    public abstract Request map(Data variables);
}

【问题讨论】:

  • 不清楚你需要什么。您能否编辑您的问题并显示您期望的结果,或者一些伪代码以及您希望您的代码做什么的解释。
  • 我认为这个想法是创建一个单一的元素列表。尝试使用expression。像@Mapping(target = "applicationData", expression = "java( Collections.singletonList(new ApplicationData(variables.data.data1, variables.data.data2, variables.data.data3) ))" 这样的东西。类名可能应该用包完全限定。

标签: java spring mapping mapstruct


【解决方案1】:

据我了解,您希望将您的值映射到单例列表中。您可以通过在映射器中提供 2 个新方法来实现这一点。

你的映射器看起来像:

@Mapper(componentModel = "spring")
public abstract class RequestMapper {
    @Mapping(target = "Id", source = "Id")
    @Mapping(target = "data", source = "variables")        
    public abstract Request map(Data variables);

    protected List<Data> mapToList(Data variables) {
        return variables == null ? null : mapToApplication(variables);
    }

    //Add mappings if they are needed
    protected abstract ApplicationData mapToApplication(Data variables);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-27
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 2017-09-07
    • 1970-01-01
    相关资源
    最近更新 更多