我try 将Java记录从一个包转换为另一个包.

@Mapper
public interface KriteriumMapper {

    KriteriumMapper INSTANCE = Mappers.getMapper(KriteriumMapper.class);
    de.model.Kriterium fromPersistenceRecord(Kriterium k);
}
package de.persistence.model.nontransactional;

public record Kriterium(String name, String crkSpaltenname) {}

package de.model;

public record Kriterium(String name, String crkSpaltenname) {}

但是Mapstruct为新记录创建了一个具有空构造函数的映射器,这显然是不可能的:

@Override
public de.Kriterium fromPersistenceRecord(de.persistence.model.Kriterium k) {
    if ( k == null ) {
        return null;
    }
    
    de.model.Kriterium kriterium = new de.Kriterium();
    
    return kriterium;
}

Mapstruct版本为1.5.5.Final.

如何处理Java记录到记录的映射?

我期待一个使用jave记录的常规all args构造器的映射器实现.

推荐答案

您混淆了包的名称,我注意到您使用了2,Kriterium多个类:

  • de.persistence.model.nontransactional.Kriterium
  • de.persistence.model.Kriterium
  • de.Kriterium

您需要仔细判断是否在KriteriumMapper中使用了正确包中的类.

以下是记录到记录映射的最小工作样本:

@Mapper
public interface KriteriumMapper {

    Kriterium2 fromPersistenceRecord(Kriterium k);
}

public record Kriterium(String name, String crkSpaltenname) {}

public record Kriterium2(String name, String crkSpaltenname) {}

下面是编译后生成的KriteriumMapperImpl的实现:

@Generated(
    value = "org.mapstruct.ap.MappingProcessor",
    date = "2023-10-02T18:18:30+0700",
    comments = "version: 1.5.5.Final, compiler: javac, environment: Java 17.0.1 (Oracle Corporation)"
)
public class KriteriumMapperImpl implementsKriteriumMapper {

    @Override
    public Kriterium2 fromPersistenceRecord(Kriterium k) {
        if ( k == null ) {
            return null;
        }

        String name = null;
        String crkSpaltenname = null;

        name = k.name();
        crkSpaltenname = k.crkSpaltenname();

        Kriterium2 kriterium2 = new Kriterium2( name, crkSpaltenname );

        return kriterium2;
    }
}

Java相关问答推荐

是否有一种格式模式,可以在除0之外的数字前面有正负符号?

从技术上讲,OPC UA客户端是否可以通过转发代理将请求通过 tunel 发送到OPC UA服务器?

是否保证在事务性块的末尾标记违反约束?

如何在运行时动态创建表(使用Java、JPA、SprringBoot)

Jakarta CDI强制bean构造/注册遗留事件侦听器

为什么使用JDK21获取锁定锁比使用JDK11慢

与不同顺序的组进行匹配,不重复组但分开

Java ArrayList的整数和数组的泛型

类型集合的Jackson JsonNode:类型引用的对象读取器应该是Singleton吗?

使SLF4J在Android中登录到Logcat,在测试中登录到控制台(Gradle依赖问题)

声明带有泛型的函数以用作查找映射中的值

如何仅使用键/ID的一部分(组合)高效地返回映射值?

将PNG转换为位图自定义十六进制字符串

如何将Pane的图像快照保存为BMP?

使用Jackson库反序列化json

Java SSLKeyManager出厂密码

如何用内置Java从JavaFX应用程序中生成.exe文件?

Domino中不同的java.Protocol.handler.pkgs设置在XPages Java中导致错误

如何使用MapStrCut转换双向链接

为什么没有加载java.se模块?