首页 > 解决方案 > 将对象集映射到字符串集

问题描述

我是 MapStruct 的新手。我有一个包含一个字符串值和一组自身的 Word 对象,我想将它映射到包含一个值和一组字符串值的 WordDTO。我不知道该怎么做。正如我在评论中所说,mapstruct 无法映射两个对象是有道理的,但如果它有帮助,我将错误放在下面: Error:(20,13) java: Can't map property "java.util.Set<Word> synonyms" to "java.util.Set<java.lang.String> synonyms". Consider to declare/implement a mapping method: "java.util.Set<java.lang.String> map(java.util.Set<Word> value)"

词类:

public class Word {
    private String wordValue;
    private Set<Word> synonyms;
}

WordDTO 类:

public class WordDTO {
    private String wordValue;
    private Set<String> synonyms;
}

(其实是设置还是列出……根本无所谓。)

我为映射实现了这个接口:

@Mapper
public interface WordMapper {
    WordMapper INSTANCE= Mappers.getMapper(WordMapper.class);

    WordDTO wordToWordDTO(Word word);
    Word wordDTOToWord(WordDTO wordDTO);
}

谢谢你的帮助。

标签: javaspringspring-bootspring-mvcmapstruct

解决方案


Mapstruct 抱怨他无法转换WordString. 你必须明确地告诉映射器如何去做。

这是一个例子:


@Mapper
public interface WordMapper {
    WordMapper INSTANCE= Mappers.getMapper(WordMapper.class);

    WordDTO wordToWordDTO(Word word);
    Word wordDTOToWord(WordDTO wordDTO);

    // Map String to Word
    @Mapping(source = "value", target = "wordValue")
    Word stringToWord(String value)

    // Map Word to string
    default String wordToString(Word word) {
      return (word == null) ? null : word.getWordValue();
    }
   
}

推荐阅读