有没有办法避免在java映射结构中使用原始字符串?

有没有办法避免在java映射结构中使用原始字符串?,java,mapstruct,Java,Mapstruct,我希望避免在将对象映射到一起时出现人为错误,因此我使用map struct包。但在某些情况下,我应该手动分配字段,比如重命名字段。喜欢这种方法吗 @Mapper(componentModel = "spring") public interface ItemMapper extends EntityMapper<ItemDTO, Item> { @Mapping(target = "itemTeplate", source = "t

我希望避免在将对象映射到一起时出现人为错误,因此我使用
map struct
包。但在某些情况下,我应该手动分配字段,比如重命名字段。喜欢这种方法吗

@Mapper(componentModel = "spring")
public interface ItemMapper extends EntityMapper<ItemDTO, Item> {
 @Mapping(target = "itemTeplate", source = "template")
 Item toEntity(Entity entity);
}
@Mapper(componentModel=“spring”)
公共接口ItemMapper扩展了EntityMapper{
@映射(target=“itemplate”,source=“template”)
项目至实体(实体);
}
是否有任何方法可以为这种用法动态生成类字段名,并且在更改命名时出错,并且具有类似于类的自动完成字段?如下图所示

@Mapper(componentModel = "spring")
public interface ItemMapper extends EntityMapper<ItemDTO, Item> {
 @Mapping(target = EntityFields.ITEM_TEMPLATE, source = ItemFields.TEMPLATE)
 Item toEntity(Entity entity);
}
@Mapper(componentModel=“spring”)
公共接口ItemMapper扩展了EntityMapper{
@映射(目标=EntityFields.ITEM_模板,源=ItemFields.TEMPLATE)
项目至实体(实体);
}

MapStruct是一个注释处理器和代码生成器,其内部工作基于反射。字段和getter/setter的基于反射的查找基于字符串匹配

我完全理解你的担忧,但是,考虑一下这些事实:

  • 用枚举替换这样的字符串文字并没有多大帮助,只添加了一个附加层。只要对象字段更改,枚举也必须更改。作为魔鬼代言人,我承认你可能想在很多类似映射的情况下使用它——但是,为此我提醒你,映射可以是
  • 编译时,MapStruct会在字段未映射时正确抛出警告,这可能在添加新字段时发生。如果根本找不到该字段,即该字段被修改或删除,则编译失败。MapStruct遵循快速失效原则

请回答问题并将代码添加为文本,而不是图像。这是否回答了您的问题@Progman否我不想在类中添加和删除字段更新代码的两部分。谢谢你的回答。从你的回答来看,我认为我在编码方面做得太干净了。非常感谢。