You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

泛型字段映射至Java Record时字段名称被截断的编译错误问题

MapStruct 泛型字段映射到 Java Record 时字段名被截断问题

问题描述

使用MapStruct做对象映射时,若源对象的字段是泛型类型(已测试List<>、Set<>,推测自定义泛型类型也会出现此问题),且映射目标为Java Record,会出现字段名称被错误截断的情况,直接导致编译失败。

编译报错信息(定位到aToB方法):

Unmapped target property: "ingList"

能明显看到原字段stringList的前3个字符被截断,无法自动匹配Record的对应字段。

复现步骤

  • 创建实体类ClassA:
public class ClassA {

    private String someString;
    private List<String> stringList;

    public String getSomeString() { return someString; }
    public void setSomeString(String someString) { this.someString = someString; }
    public List<String> getStringList() { return stringList; }
    public void setStringList(List<String> stringList) { this.stringList = stringList; }

}
  • 创建Java Record类ClassB:
public record ClassB(
    String someString,
    List<String> stringList
) {};
  • 定义MapStruct Mapper接口:
@Mapper
public interface ABMapper {
  ClassA bToA(ClassB classB);
  ClassB aToB(ClassA classA);
}

解决方案

  1. 显式指定映射关系
    在对应的Mapper方法上添加@Mapping注解,手动绑定字段,强制MapStruct识别正确的字段名称:
@Mapper
public interface ABMapper {
  ClassA bToA(ClassB classB);

  @Mapping(source = "stringList", target = "stringList")
  ClassB aToB(ClassA classA);
}
  1. 升级MapStruct版本
    该问题属于MapStruct的版本兼容性bug,建议升级到最新稳定版(例如1.5.5.Final及以上),官方已修复此类字段名称解析的问题。

内容的提问来源于stack exchange,提问作者Omid Rostami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 13:45:32