簡體   English   中英

mapstruct:如何從mapstruct中的對象屬性構造字符串?

[英]mapstruct: How to construct a string from an object's property in mapstruct?

我有下面的類結構。

public class Comment
{
  private Integer id;
  private String text;

  //getters & setters
}

@Mapper(componentModel = "spring")
public interface CommentMapper
{
    String map(Comment comment);
    Comment map(String text);
    //Comment map(String someNameHere);
}

下面是mapstruct生成的實現

@Override
public String map(Comment comment) {
if ( comment == null ) {
    return null;
}
String string = new String();
return string;
}

@Override
public Comment map(String text) {
if ( text == null ) {
    return null;
}
Comment comment = new Comment();
comment.setText( text );
return comment;
}

/*
@Override
public Comment map(String someNameHere) {
    if ( someNameHere == null ) {
        return null;
    }
    Comment comment = new Comment();
    return comment;
}
*/

問題1:將Comment對象作為參數並返回字符串的map方法只是返回一個空字符串對象,而不是在字符串上設置text屬性並返回它。 為什么? 以及如何獲取comment對象的text屬性?

問題2:當map方法的參數名稱為text它將利用該類的text屬性生成實現,或者只是使用空的comment對象。 我真的很驚訝地看到mapstruct生成不同的實現也取決於參數名稱。 有什么解釋嗎?

注意: Comment對象用作另一個對象內的屬性。 那里我需要上述行為。 現在,我以這種方式進行管理。 @Mapping(source =“ entity.comment.text”,target =“ comment”)@Mapping(source =“ dto.comment”,target =“ comment.text”)

MapStruct的bugtracker中存在類似您的問題( #584無法創建返回的對象為String的方法 ):

MapStruct通常在Java Bean上運行,即,它期望源對象和目標對象具有屬性。 對於您的情況,我只是將映射器設為一個抽象類,然后手動實現該方法(代碼生成實際上不會給您帶來任何好處):

 String dtoToString(Dto dto) { return dto.getField1(); } 

然后,其他(生成的)方法可以使用該方法將DTO屬性映射為字符串屬性。 除了在抽象映射器本身上聲明此手動編寫的方法之外,您還可以在另一個類上聲明它,然后通過@Mapper#uses()導入它。

-https://github.com/mapstruct/mapstruct/issues/584#issuecomment-117523614

恕我直言,您目前的操作方式還不錯,我會堅持下去。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM