有什么方法可以避免在 java 映射结构中使用原始字符串?

Is there any way to avoid using raw string usage in java map-struct?

我想避免在将对象映射在一起时出现人为错误,所以我使用了 map-struct 包。但有些情况下我应该手动分配字段,例如重命名它们。喜欢这个方法

@Mapper(componentModel = "spring")
public interface ItemMapper extends EntityMapper<ItemDTO, Item> {
 @Mapping(target = "itemTeplate", source = "template")
 Item toEntity(Entity entity);
}

有什么方法可以为此用途动态生成 class 字段名称并在更改命名时出现错误并具有自动完成 class 之类的字段?如下图

@Mapper(componentModel = "spring")
public interface ItemMapper extends EntityMapper<ItemDTO, Item> {
 @Mapping(target = EntityFields.ITEM_TEMPLATE, source = ItemFields.TEMPLATE)
 Item toEntity(Entity entity);
}

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

我完全理解您的担忧,但是,请考虑以下事实:

  • 用枚举替换这样的字符串文字对你没有多大帮助,只会增加一个额外的层。只要更改了对象字段,就必须更改枚举。作为魔鬼的拥护者,我承认你可能想要在很多类似映射的情况下无论如何使用它 - 但是,为此我提醒你映射可以是 inherited.
  • 编译时,MapStruct 会在字段未映射时正确抛出警告,这可能在添加新字段时发生。如果根本找不到该字段,即该字段被修改或删除,则编译失败。 MapStruct 遵循 fail-fast 原则。