MapStruct转换javaBean时出现的诡异事件

Posted on 2021-09-29 11:14  焚天火  阅读(318)  评论(0编辑  收藏  举报

在项目中用到了MapStruct,对其可以转换JavaBean特别好奇,因为之前都是使用Vo的方式手动set转换,但是接触到MapStruct后感觉以前使用Vo的方式确实有点low

于是就想着去看一下,写了个demo。于是这诡异的时间就开始了

我得代码如下:

这是pom文件

 

这是我的两个javaBean

 

 

 

 

大家可以看到那个发灰的序列化接口,那是因为我再运行出结果是转换后的JavaBean属性为空,我以为是序列化时导致的所以我去掉了,

可是后来发现完全不是这个原因

这是我的mapper转换类

 

 

 还有我的启动执行类

 

 

 正确的运行结果应该是这样的

 

现在我的运行结果是

 

这让我挺懵X的,于是我查了好多大佬的博客,都说在pom中添加 “maven-compiler-plugin” 的配置就可以解决于是我配置了

如下:

 

 

 那灰色的是看到有的大佬说的这么配置,之前我的maven-compiler-plugin是3.8版本的,跟着大佬的只是做成了现在的样子,但是好像还是没什么用,

运行之后属性就是空的,我尝试maven-clean和maven-instell在我大量的尝试中我突然发现在install之后修改那个转换的方法名之后就可以转换成功,属性也有了值,

我通过debug方式去看了执行过程中,在我没有改方法名之前mapper的实现类中没有生成set方法,但是我改了之后就会生成set方法,这也是导致属性为null的直接原因。

我尝试了好多的方法,看了好多的资料也没想明白,为什么会出现这样的问题,苦恼》》》啊!!

我就是在打包后改了这个方法

 

只要改动一下这个构造方法就可以实现。。

求大佬解惑,什么原因啊

 

《============================================================================================================================================================》

2021-10-27

今天再一次翻到这个的时候,发现可能是之前加入的plugin有问题,重新添加了一个问题解决了

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.3.0.Final</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.18</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>0.2.0</version> <!-- 如果是0.1.0 有可能出现生成了maptruct的实现类,但该类只创建了对象,没有进行赋值 -->
</path>

</annotationProcessorPaths>
</configuration>
</plugin>

还有一个参考链接:https://www.jianshu.com/p/e1b69f36bd8a