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

如何在Mapster中为不同类型源字段定义条件映射?

Mapster条件映射:解决不同类型源字段的分支映射问题

你遇到的问题是因为Mapster在编译映射配置时,会严格检查源字段和目标字段的类型兼容性。即使你给第一个Map方法加了条件判断,它依然会尝试将int?类型的IntValue直接映射到string类型的Mapped,而Nullable<int>和string之间没有默认的强制转换操作符,所以抛出了类型转换异常。

不用AfterMapping也能通过Mapster原生语法解决,这里提供两种方案:

方案1:在映射表达式中直接处理类型转换与分支逻辑

直接在Map的源表达式里完成分支判断和类型转换,确保源类型和目标类型一致:

TypeAdapterConfig.GlobalSettings
    .NewConfig<Source, Destination>()
    .Map(dest => dest.Mapped, src => src.IntValue.HasValue ? src.IntValue.ToString() : src.StringValue);

方案2:使用MapWhen方法做明确的条件分支映射

Mapster提供的MapWhen方法支持针对特定条件配置独立的映射规则,每个分支都可以单独处理类型转换:

TypeAdapterConfig.GlobalSettings
    .NewConfig<Source, Destination>()
    .MapWhen(src => src.IntValue.HasValue, dest => dest.Mapped, src => src.IntValue.ToString())
    .MapWhen(src => !src.IntValue.HasValue, dest => dest.Mapped, src => src.StringValue);

这两种方案都能让Mapster正确编译映射逻辑,满足你的需求:当IntValue不为null时用它的字符串形式赋值给Mapped,否则使用StringValue。

内容的提问来源于stack exchange,提问作者Aleksei Petrov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 00:47:15