Spring boot 我应该在什么时候将mapstruct或转换器与java 8一起使用以避免容易出错?

Spring boot 我应该在什么时候将mapstruct或转换器与java 8一起使用以避免容易出错?,spring-boot,java-8,converters,mapstruct,software-quality,Spring Boot,Java 8,Converters,Mapstruct,Software Quality,在工作中,我们在许多SpringBoot项目和Java8RESTFull应用程序中使用MapStruct,当我们需要将实体映射到DTO或DTO以响应或在类似情况下使用MapStruct。但是今天我的朋友向我展示了使用简单的转换器而不是MapStruct的巨大优势 这是一个使用MapStrurct的简单示例: @Mapper(componentModel="spring", unmappedTargetPolicy = ReportingPolicy.IGNORE) publi

在工作中,我们在许多SpringBoot项目和Java8RESTFull应用程序中使用MapStruct,当我们需要将实体映射到DTO或DTO以响应或在类似情况下使用MapStruct。但是今天我的朋友向我展示了使用简单的转换器而不是MapStruct的巨大优势

这是一个使用MapStrurct的简单示例:

@Mapper(componentModel="spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface AccountMapper {
    @Mapping(source = "customerBank.customerId", target = "customerId")
    AccountResponse toResponse(AccountBank accountBank);
}
它工作得很好,但实际上,如果有人用另一个名称更改customerId属性,并且忘记更改此映射器,则会出现运行时错误

转换器的优点是我们将有一个编译时错误并避免运行时错误

请让我知道,如果有人设法分享如何避免运行时错误,如我提出的方案,使用MapStruct,因为转换器并没有带来同样的优势


我的问题是:是否可以高效地使用MapStruct,我的意思是没有运行时错误倾向?

如果我理解得很好,您可能希望使用MapStruct自定义映射产生错误属性命名的编译时错误。 如果是这样,您应该在pom.xml中添加必要的构建插件(如果您使用maven)


org.apache.maven.plugins
maven编译器插件
3.5.1
1.8
1.8
org.mapstruct
mapstruct处理器
${mapstruct.version}
当然,还要为MapStruct版本声明一个属性:

<properties>
    <mapstruct.version>1.4.1.Final</mapstruct.version>
</properties>

1.4.1.最终版本
编译项目后,通过添加的插件,注释处理器将生成完整的实现:
公共类AccountMapperImpl实现AccountMapper
在target\generated sources\annotations文件夹中。 您可以检查实现类的生成源代码,所有这些都已设置并仔细检查。
如果
@Mapping
注释中的属性名称不存在,编译器将抛出一个错误。

如果您对maven或pom.xml有任何疑问,请询问。非常好的解决方案Boris。你说到点子上了,给了我一个很好的解决方案。我已经在这里检查过了,解决方案非常有效。
<properties>
    <mapstruct.version>1.4.1.Final</mapstruct.version>
</properties>