我有两个类。请求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);
但这不起作用,它说它不能将字符串转换为长字符串。我要求解决这个问题,或者采取更好的方法。
如果要手动执行映射(理想情况下是针对不同的对象)
您可以查看文档中的不同对象映射属性映射,
可以通过使用方法引用来匹配源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;
}
问题是modelmapper将映射
一个非常简单的问题,烟熏我的情况下的漏洞。我试图跳过userDTO的setPassword每次当我转换用户- 在ModelMapper的这一行,我得到了NullPointerException- 我知道“源”映射不存在,但我的问题是,既然我要求它根本不设置密码,它为什么还要关心它。 抱歉,我想我缺少ModelMapper的一些基础知识。谢谢你的时间和帮助。 得到ModelMapper的帮助,跳过一
现在前3个整数是我需要广播的一些计数器。之后,所有行都具有相同的格式,如 我将在3个计数器后的所有这些值映射到一个新的RDD后,用它们在函数中做一些计算。但我无法理解如何分离前3个值,并正常映射其余值。 我的Python代码是这样的
我有一个多模块maven项目,在同一个文件夹(src/test/java)中包含集成和单元测试。集成测试标记为。我想以以下设置结束: 如果我运行,我希望所有测试都能编译,但我不想执行任何测试 重要的一点是,我希望在中配置它,而没有任何额外的命令行参数。 目前,我在我的父母pom中提出了以下设置。xml,其中唯一的问题是#1,其中执行所有测试: 所有子模块的pom中都有以下插件配置。xml,我认为应
我想在和之间进行映射,但不包括一个字段,例如。我如何才能做到这一点,因为我认为这种方法会起作用,但它没有: