当前位置: 首页 > 知识库问答 >
问题:

MapStruct:从多个变量映射到集合

陆伟
2023-03-14

我得到以下情况:

源类:

public class OutcodeStats {
     double avgPrice;
     double avgPricePsf;
     double avgRent;
     double avgYield;
     double growth1y;
     double growth3y;
     double growth5y;
     String outcode;
     int salesPerMonth;
     int turnover;
     long effectiveDate;
}
  public class GrowthStats {
    public String status;
    public String postcode;
    public String postcode_type;
    public String url;
    public List<List<Object>> data;
    public String process_time;
}
    null
   @Mapper
public interface OutcodeStatsMapper {

    OutcodeStatsMapper INSTANCE = Mappers.getMapper(OutcodeStatsMapper.class);

    @Mapping(source="outcode", target = "postcode")
    @Mapping(source = "growth1y", target = "data")
    @Mapping(source = "growth3y", target = "data")
    @Mapping(source = "growth5y", target = "data")
    GrowthStats outcodeStatsToGrowthStats(OutCodeStats stats);
}
     "outcode":"BR1",
     "avg_price":436061.3,
     "avg_price_psf":0,
     "avg_rent":295.2,
     "avg_yield":"3.5%",
     "growth_1y":"5.6%",
     "growth_3y":"6.3%",
     "growth_5y":"17.9%",
     "sales_per_month":28,
     "turnover":"4%"
    "status":"success",
   "postcode":"BR1",
   "postcode_type":"outcode",
   "url":"https:\/\/propertydata.co.uk\/draw?input=BR1",
   "data":[
      [
         null,
         null,
         "3.5"
      ],
      [
         null,
         null,
         "5.6"
      ],
      [
         null,
         null,
         "6.3"
      ]
   ],
   "process_time":"0.26"

共有1个答案

乜嘉悦
2023-03-14

这里是我让它工作的方式:

    @Mapper
public interface OutcodeStatsMapper {

    OutcodeStatsMapper INSTANCE = Mappers.getMapper(OutcodeStatsMapper.class);

    @Mapping(source = "outcode", target = "postcode")
    GrowthStats outcodeStatsToGrowthStats(OutCodeStats stats);

    @AfterMapping
    default void fillData(OutCodeStats outCodeStats, @MappingTarget GrowthStats growthStats) {
        growthStats.status = "success";
        growthStats.postcode_type= "outcode";
        growthStats.data = new ArrayList<>();
        Stream.of(outCodeStats.growth1y, outCodeStats.growth3y, outCodeStats.growth5y)
                .forEach(yearStats -> growthStats.data.add(List.of("null", "null", yearStats)));
    }
}
 类似资料:
  • 我有一个关于mapstruct中@ManyToOne映射的问题。我有两个表 第一个: 第二个是: 我有一个这样的箱子: 和MemberDto作为实体相同。 我需要使用mapstruct进行如下映射: 我需要填写名单成员;但我不明白怎么做。

  • 假设我需要将两个对象映射成一个或一个对象映射成一个(重载)。我可以通过以下映射来实现: 是否有一种方法可以更改第二个映射器“先做第一个映射器”,然后应用的附加映射?

  • 我使用mapstruct将我的DTO映射到它对应的实体。 DTO 包含一个哈希映射变量,其条目应映射到特殊哈希映射实体的键和值变量。这就是为什么我用一个额外的方法描述这个映射,如下所示: 这工作正常。我遇到的唯一问题是我不想映射哈希映射的所有条目。我只想映射条目,其键包含在列表。虽然可以从 构造此,但此变量不是 dto 的一部分。我想知道如何执行我的映射。 我的问题是: 是否可以在此接口内计算此,

  • 我可以想象这样一个解决方案:一个子映射器,在这个映射器中,我用如下所示的查找重写Dto to Domain方法: 但目标在MapStruct中是必需的。也许我可以以某种方式指定整个对象作为目标?

  • 我把这三门课分别放在不同的文件中 我有下面的映射器 这目前仅映射lastName并起作用,我想将Book中的作者字符串映射为 我怎么能这么做?我在MapStruct文档中找不到任何东西。

  • 我有两种将实体映射到域的方法。 当我试图定义实体列表到域的映射方法时,我发现了用于映射集合元素的模糊映射方法。 有没有一种方法可以定义用于映射对象集合的方法