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

如何在modelmapper中跳过目标源中的属性?

隆睿
2023-03-14

我有两个类。请求DTO和实体。我想将请求DTO映射到实体。在这种情况下,我想手动插入实体属性之一,这意味着属性不在请求DTO中。如何使用模型映射器实现这一点。

public class RequestDTO {

    private String priceType;

    private String batchType;
}

public class Entity {


    private long id;

    private String priceType;

    private String batchType;
}

Entity newEntity = modelMapper.map(requestDto, Entity.class);

但这不起作用,它说它不能将字符串转换为长字符串。我要求解决这个问题,或者采取更好的方法。

共有1个答案

龙志勇
2023-03-14

如果要手动执行映射(理想情况下是针对不同的对象)

您可以查看文档中的不同对象映射属性映射,

可以通过使用方法引用来匹配源getter和目标setter来定义属性映射。

typeMap.addMapping(Source::getFirstName, Destination::setName);

源和目标类型不需要匹配。

 typeMap.addMapping(Source::getAge, Destination::setAgeString);

如果不想逐字段映射以避免样板代码

您可以配置跳过映射器,以避免将某些字段映射到目标模型:

modelMapper.addMappings(mapper -> mapper.skip(Entity::setId));

我已经为您的案例创建了一个测试,映射适用于双方,而无需配置任何内容:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.junit.Before;
import org.junit.Test;
import org.modelmapper.ModelMapper;

import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertNotNull;

public class ModelMapperTest {

    private ModelMapper modelMapper;

    @Before
    public void beforeTest() {
        this.modelMapper = new ModelMapper();
    }

    @Test
    public void fromSourceToDestination() {
        Source source = new Source(1L, "Hello");
        Destination destination = modelMapper.map(source, Destination.class);
        assertNotNull(destination);
        assertEquals("Hello", destination.getName());
    }

    @Test
    public void fromDestinationToSource() {
        Destination destination = new Destination("olleH");
        Source source = modelMapper.map(destination, Source.class);
        assertNotNull(source);
        assertEquals("olleH", destination.getName());
    }
}

@Data
@NoArgsConstructor
@AllArgsConstructor
class Source {
    private Long id;
    private String name;
}

@Data
@NoArgsConstructor
@AllArgsConstructor
class Destination {
    private String name;
}
 类似资料:
  • 一个非常简单的问题,烟熏我的情况下的漏洞。我试图跳过userDTO的setPassword每次当我转换用户- 在ModelMapper的这一行,我得到了NullPointerException- 我知道“源”映射不存在,但我的问题是,既然我要求它根本不设置密码,它为什么还要关心它。 抱歉,我想我缺少ModelMapper的一些基础知识。谢谢你的时间和帮助。 得到ModelMapper的帮助,跳过一

  • 现在前3个整数是我需要广播的一些计数器。之后,所有行都具有相同的格式,如 我将在3个计数器后的所有这些值映射到一个新的RDD后,用它们在函数中做一些计算。但我无法理解如何分离前3个值,并正常映射其余值。 我的Python代码是这样的

  • 我有一个多模块maven项目,在同一个文件夹(src/test/java)中包含集成和单元测试。集成测试标记为。我想以以下设置结束: 如果我运行,我希望所有测试都能编译,但我不想执行任何测试 重要的一点是,我希望在中配置它,而没有任何额外的命令行参数。 目前,我在我的父母pom中提出了以下设置。xml,其中唯一的问题是#1,其中执行所有测试: 所有子模块的pom中都有以下插件配置。xml,我认为应

  • 我想在和之间进行映射,但不包括一个字段,例如。我如何才能做到这一点,因为我认为这种方法会起作用,但它没有: