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

使用MapStruct将嵌套Map<String, Map<String, Object>>结构转换为自定义Java实体类的实现方案咨询

使用MapStruct将嵌套Map<String, Map<String, Object>>结构转换为自定义Java实体类的实现方案咨询

我有一个如下格式的API响应:

{
  "apiResponse": {
    "successRequestList": {
      "rides": {
        "bike": null,
        "cars" :{
          "features": {"roof", "Power Steer", "..."},
          "variants": {"petrol", "diesel", "hybrid"},
          "launched" : [
            {
              "city-name": "",
              "country": ""
            }
          ]
        }
      }
    },
    "failedRequestList": {}
  }
}

我想要用MapStruct把cars的值映射到如下的Java对象中:

public class Assets {
    private String validResponse;
    private Drive drive;
}

public class Drive {
    private List<String> features;
    private List<String> variants;
    private List<Availability> availableIn;
}

我尝试用MapStruct把cars映射到Drive对象,但一直没找到可行的方法。

我也试过编写自定义默认方法来实现,但遇到了ClassCastException:

java.lang.ClassCastException: class java.util.LinkedHashMap cannot be cast to class Assets$Drive (java.util.LinkedHashMap is in module java.base of loader 'bootstrap'; Assets$Drive is in unnamed module of loader 'app')

有人能建议一下是否可以用MapStruct轻松实现这个映射,还是我应该换用其他库?ChatGPT也没能给出可行的解决方案。

JSON响应被存储在ResponseDTO类中:

public class ResponseDTO {
    private Map<String, Map<String, Object>> successRequestList;
}

我需要实现如下的映射:

public interface RideMapper {

    @Mapping(target = "drive", expression = "java((Drive) response.getSuccessRequestList()" +
            ".get(\"rides\").get(\"cars\"))")
    Assets mapToRulesReferenceContext(ResponseDTO response);
}

备注:内容来源于stack exchange,提问作者Gagan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 17:55:30