20220816 springboot_idea_mapStruct_轉Entity 生成的ToDominObject沒有用有參構造方法構造對象 自定義實現類

1    問題:

使用lombok,DDD設計思想整合mapStruct時,轉Entity 生成的ToDominObject沒有用有參構造方法構造對象

 

2    解決方案:

2.1    未解決_原因猜想

因爲生成的實現類,ToPo有對應的Set方法,ToEntity沒有對應的Set方法。

Po中有@Setter註解,而Do爲了維護對象完整性,不會有set方法(參見:https://www.cnblogs.com/1446358788-qq/articles/15319451.html  1.2.3).所以導致轉Do的方法沒有set方法。而項目對應的生成的實現類的toEntity中是用有參構造生成的對象,所以這是我們的目標。

 

2.2    未解決_正確步驟_大佬1支持_添加@Default註解

請教了一個同事,發現和項目對比,Do的有參構造方法

缺少了@Default註解,於是添加了該註解,並新增了該註解類。

package com.example.jiayou.ceshi;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.CONSTRUCTOR})//註解的作用目標:構造函數
@Retention(RetentionPolicy.RUNTIME)//註解不僅被保存到class文件中,jvm加載class文件之後,仍然存在
public @interface Default {
}

初步推測,mapStruct是在jvm加載的時候生成的實現類,默認用有參構造函數,然而,啓動後發現依然不行,至少往前邁進了一步

 

2.3    未解決_正確步驟_大佬2支持_lombok版本問題

於是請教了原先做這塊的同事,這塊同事說是lombok版本問題,只有1.4+版本的才支持這種做法,於是pom文件放入項目在用的1.4.2.Final版本,啓動後飄紅

 

2.4    已解決_lombok版本問題

原先受網上一些說法jdk8以下的mapstruct-jdk8的蠱惑,導致報錯,修改成

        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct-processor</artifactId>
            <version>1.4.2.Final</version>
        </dependency>
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct</artifactId>
            <version>1.4.2.Final</version>
        </dependency>

問題解決.

 

 

3    問題反思

以前很多問題卡殼,是因爲沒有或者不清楚正確的做法,以後整理知識點的時候還是要拿已經有成功的案例的,這樣有相關的資源可以利用,試錯成本就會少很多

 

 

4    整合後的整個案例

https://www.cnblogs.com/1446358788-qq/articles/16585575.html  2

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章