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

Model Mapper映射同属性名异类型类时仅单字段成功问题排查

ModelMapper仅映射一个字段的原因及解决方法

问题场景

现有两个类:

public class Transaction {
   private TransactionType paymentType;
   private TransactionStatus status;
}
public class TransactionDetails {
   private String paymentType;
   private String status;
}

使用ModelMapper将List<Transaction>映射为List<TransactionDetails>:

Type listType = new TypeToken<List<TransactionDetails>>(){}.getType();
List<TransactionDetails> transactionDetailsList = modelMapper.map(transaction, listType);

结果仅paymentType成功映射为"CASH",status为null。

核心原因

大概率是**TransactionStatus枚举的字符串转换规则不符合ModelMapper的默认映射逻辑**,而TransactionType刚好匹配:

  • ModelMapper默认会尝试将枚举类型转换为字符串,通常是调用枚举的toString()方法,或者取枚举的name()值(即枚举常量的标识符)。
  • 如果TransactionType的toString()或name()返回的就是"CASH"这类目标字符串,就能成功映射;但TransactionStatus的对应输出可能不符合预期(比如返回了带包名的全限定名、自定义的toString内容和目标字段不匹配,或者枚举常量本身的命名和期望的字符串不一致)。
  • 另外也有可能是Transaction对象中的status字段本身就是null,但如果确认原对象有值,那可以排除这个情况。

解决方案

1. 检查并修正枚举的字符串输出

确保TransactionStatus的toString()或name()返回目标需要的字符串:

// 示例:给枚举添加自定义toString方法
public enum TransactionStatus {
    SUCCESS("SUCCESS"),
    FAILED("FAILED");

    private final String value;

    TransactionStatus(String value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return value;
    }
}

2. 添加自定义类型转换器

如果不想修改枚举源码,可以给ModelMapper配置自定义转换规则:

ModelMapper modelMapper = new ModelMapper();
// 配置TransactionStatus到String的转换器
Converter<TransactionStatus, String> statusConverter = context -> {
    if (context.getSource() == null) {
        return null;
    }
    // 根据需求返回对应字符串,比如取枚举的name()或自定义值
    return context.getSource().name();
};
modelMapper.addConverter(statusConverter);

// 执行映射操作
Type listType = new TypeToken<List<TransactionDetails>>(){}.getType();
List<TransactionDetails> transactionDetailsList = modelMapper.map(transaction, listType);

3. 验证原对象字段值

确认Transaction列表中的每个对象的status字段都不为null,如果原字段本身就是null,映射结果自然也是null。

内容的提问来源于stack exchange,提问作者vivek hegde

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:20:14