亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Mapstruct:當源為空時如何將目標字符串默認為空字符串Java / Spring

Mapstruct:當源為空時如何將目標字符串默認為空字符串Java / Spring

尚方寶劍之說 2023-03-31 15:06:38
我有兩個對象源和目標,它們都具有相同的字段名稱和類型。如果源字段為空,我希望目標為“”(空字符串)我的接口映射看起來像這樣(這只是兩個字段,我有很多)@Mapper(componentModel = "spring", nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT)public interface MyMapper {@Mappings({    @Mapping(target="medium", defaultExpression="java(\"\")"),    @Mapping(target="origin", defaultExpression="java(\"\")") }) public Target mapFrom(Source source)如果 Source 有一個值,它應該被復制,如果它在源中為空,那么在目標中它應該是“”。Mapstruct-1.3.0 似乎只是讓一切都為空。任何想法?我希望一切都默認為空字符串
查看完整描述

2 回答

?
慕碼人2483693

TA貢獻1860條經驗 獲得超9個贊

您需要設置NullValuePropertyMappingStrategy(作為注釋的一部分Mapper)以定義如何映射空屬性。

參見NullValuePropertyMappingStrategy.html#SET_TO_DEFAULT

String的默認值為""。您不需要明確定義它。

所以,你的映射器可以簡單地看起來像這樣:

@Mapper(

? ? componentModel = "spring",?

? ? nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT,?

? ? nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_DEFAULT

)

public interface MyMapper {


? ? public Target mapFrom(Source source);


}


查看完整回答
反對 回復 2023-03-31
?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

當您的 Source 對象具有與 Target 對象相同的字段并且當您想要管理所有 Source值(例如對于 String)成為Target 對象中的空字符串(“”)時,您可以從MapStruct庫創建映射器接口,如下所示:

步驟1:

@Mapper(componentModel = "spring")

public interface SourceToTargetMapper {


? Target map(Source source);


? @BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_DEFAULT)

? void update(Source source, @MappingTarget Target target);

}

整個技巧是定義nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_DEFAULT,但您不能在 @Mapper 注釋中定義它。取而代之的是,您必須將它作為參數放在update()方法的 @BeanMapping 注釋中。您可以在MapStruct 文檔中閱讀更多相關信息。


第2步:

因此,您必須在代碼中再執行一項操作并使用剛剛實現的“update()”方法:


@Component

public class ClassThatUsingMapper {


? private final SourceToTargetMapper mapper;


? public Target someMethodToMapObjects(Source source) {

? ? Target target = mapper.map(source);

? ? mapper.update(source, target)


? ? return target;

? }

}


所有null 到空 String 的過程都發生在mapper.update(source, target)method 下。為您的項目運行后mvn clean install,您可以檢查它的外觀以及它在target/generated-sources/annotations/...../SourceToTargetMapperImpl.java文件中的工作方式。


查看完整回答
反對 回復 2023-03-31
  • 2 回答
  • 0 關注
  • 1277 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號