当前位置: 首页 > 知识库问答 >
问题:

List映射到List

岳迪
2023-03-14

我正在学习如何在Spring Boot和Kotlin项目中使用Mapstruct。

我有一个生成的DTO(ThessaurusDTO),它有一个列表,我需要将它映射到我的模型(Vocab)上的列表中。

MapStruct不能自动映射这一点是有道理的,但我知道第一个列表将始终是size=1。我无法控制DTO模型所属的API。我在文档中发现,我可以在接口中创建和定义一个默认的方法实现,它可以松散地翻译成Kotlin中的一个普通函数

@Mapper
interface VocabMapper {

    @Mappings(
            // ...
    )
    fun thessaurusToVocab(thessaurusDTO: ThessaurusDTO): Vocab

    fun metaSyns(nestedList: List<List<String>>): List<String> 
             = nestedList.flatten()
}
VocabMapper.java:16: error: Can't map collection element "java.util.List<java.lang.String>" to "java.lang.String ". Consider to declare/implement a mapping method: "java.lang.String map(java.util.List<java.lang.String> value)".

共有1个答案

栾峰
2023-03-14

我在文档中发现,我可以在接口中创建和定义一个默认的方法实现,它可以松散地翻译成Kotlin中的一个普通函数

根据我在网上找到的信息,Kotlin并没有正确地将接口函数转换为Java中的默认方法,而是实际上生成了一个实现接口的类。

如果问题出在这里,您可以使用@jvmdefault注释metasyns:

指定应为非抽象Kotlin接口成员生成JVM默认方法。

使用此批注需要指定显式编译参数:-xjvm-default=enable-xjvm-default=compatibility

有关区别,请参阅链接,但您可能需要-xjvm-default=enable

 类似资料:
  • 3.6. 映射 list Python 的强大特性之一是其对 list 的解析, 它提供一种紧凑的方法, 可以通过对 list 中的每个元素应用一个函数, 从而将一个 list 映射为另一个 list。 例 3.24. List 解析介绍 >>> li = [1, 9, 8, 4] >>> [elem*2 for elem in li] [2, 18, 16, 8] >>> li

  • 有人能给我指出一个字段声明的如何在spring-数据-卡桑德拉中映射回Java。我可以简单地通过保存数据,但当从数据库读取数据时不起作用,会弹出一个未找到编解码器的异常。 非常感谢帮助。

  • 本文向大家介绍Java 将Map映射转换为 List,包括了Java 将Map映射转换为 List的使用技巧和注意事项,需要的朋友参考一下 首先,让我们创建一个Java Map并初始化- 现在,将Map转换为List- 示例 以下是在Java中将Maps转换为List的程序- 输出结果

  • 我正在构建一个REST API, 和ActiveBid类 和我的泽西请求映射器,它具有获取数据的逻辑 有人能帮我吗?我不知道和卡桑德拉共事会这么难。

  • 我已经用MapStruct 1.1工作了几天,但还没有达到我所需要的。 我想做的是:我想将JPA实体映射到DTO,以便在Primefaces项目中实现更好的属性视图绑定。 所以我有我的实体如下: 病人JAVA 人JAVA 我想把这些实体画成这样: 耐心等待。JAVA 潘松多。JAVA 我编写了Mapper类和一个实用程序,就像GitHub上的官方示例中描述的那样(https://github.co

  • 卡桑德拉表列: Java实体: 当执行从表列“pickuploc”中选择查询时,并没有完全映射到实体中定义的picupLocal属性。 这是我得到的回应: 使用Spring数据卡桑德拉1.5.8