【问题标题】:Mapstruct convert object field to type as string + value.toString()Mapstruct 将对象字段转换为字符串 + value.toString()
【发布时间】:2020-12-30 22:39:07
【问题描述】:

在 Java 中,我们有这个漂亮的库 Mapstruct。 我想知道它是否可以将字段映射到字段类型名称 + 字段 value.toString()。 假设我有两个类 ConvertFrom 和 ConvertTo。

public class ConvertFrom {
    private String strValue;
    private Long longValue;
}

public class ConvertTo {
    private Map<String, Map<String, String>> result;
}

我希望 mapstruct 将字段 strValue 和 longValue 转换为 type as string + value.toString()。 所以我希望 mapstruct 创建的实现是这样的:

public class ConvertFromToConvertToMapper {

    public ConvertTo toDto(ConvertFrom convertFrom) {
        ConvertTo convertTo = new ConvertTo();

        Field[] fields = ConvertFrom.class.getDeclaredFields();
        for (Field field : fields) {
            try {
                field.setAccessible(true);
                if (Objects.nonNull(field.get(convertFrom))) {
                    convertTo.getResult().put(field.getName(), Map.of(field.getType().getSimpleName(), field.get(convertFrom)));
                }
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }

        return convertTo;
    }
}

mupstruct 可以吗?

【问题讨论】:

    标签: serialization mapping mapstruct


    【解决方案1】:

    我想出了这个解决方案

    1. 创建一个将 ConvertFrom 映射到 Map 的类,并使其成为 Spring Bean。
    @Mapper(componentModel = "spring")
    public class ConvertFromToConvertToMapper {
    
        public static Map<String, Map<String, ?>> toMapDto(ConvertFrom convertFrom) {
            Map<String, Map<String, ?>> result = new HashMap<>();
            Field[] fields = ConvertFrom.class.getDeclaredFields();
            for (Field field : fields) {
                try {
                    field.setAccessible(true);
                    if (Objects.nonNull(field.get(convertFrom))) {
                        result.put(field.getName(), Map.of(field.getType().getSimpleName(), field.get(convertFrom)));
                    }
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
    
            return result;
        }
    }
    
    1. 只要我想将 ConvertFrom 映射到 Map,就使用创建的映射器。 例如。如果我有像这样的具有 ConvertFrom 字段的 Dto
    public class GeneralConvertFrom {
        private ConvertFrom convertFrom;
    }
    

    我的映射器看起来像这样

    @Mapper(componentModel = "spring", uses = ConvertFromToConvertToMapper.class)
    public interface GeneralConvertFromToConvertToMapper {
        @Mapping(target = "result", source = "convertFrom")
        ConvertTo toDto(GeneralConvertFrom entity);
    }
    
    

    这么说我没有自己写mapper ConvertFromToConvertToMapper 没找到办法。

    【讨论】:

      猜你喜欢
      • 2014-01-14
      • 2011-08-02
      • 2016-06-10
      • 2021-12-05
      相关资源
      最近更新 更多