如何在MapStruct中让同一参数同时用于@Mapping与@Named方法?
解决MapStruct中单一参数同时用于映射和自定义转换方法的问题
直接用以下方式修改代码即可,无需重复传入参数:
@Mapper public interface CarMapper { @Mapping(source = "localCar.color", target = "color") @Mapping(source = "blueBookCar.price", target = "price") @Mapping(source = "localCar.features", target = "features", qualifiedByName = "mapFeatures") abstract CarDto from(LocalCar localCar, BlueBookCar blueBookCar); @Named("mapFeatures") Map<Long, Feature> mapFeatures(Map<Group, Feature> features, @Context BlueBookCar blueBookCar) { // 此处可同时使用来自localCar的features参数,以及blueBookCar参数处理转换逻辑 } }
关键逻辑说明
- 主方法中的
BlueBookCar blueBookCar保持无注解状态,MapStruct会将其识别为映射源参数,允许在@Mapping中通过blueBookCar.price引用其属性。 - 自定义转换方法
mapFeatures中,给BlueBookCar参数添加@Context注解,MapStruct会自动将主方法中的blueBookCar实例传递到该参数中,无需手动重复传入。 - 这种配置既满足了
@Mapping对源参数的要求,又能让自定义方法获取到该参数用于业务逻辑处理。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

