![](/img/trans.png)
[英]MapStruct: How to map property from "java.lang.Object to "java.lang.String"
[英]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.