gpt4 book ai didi

java - ModelMapper - 如何使用map(source,destination.class,typeMapName)?

转载 作者:行者123 更新时间:2023-12-02 03:33:11 26 4
gpt4 key购买 nike

我在 java 应用程序中使用 ModelMapper 将 DTO 转换为 POJO。

我有一个 MyObjectDto 类,必须将其转换为 MyObject 才能用作实体并发送到数据库。

我有一个用例,我收到带有 id 属性的 MyObjectDto ,这将告诉我的 ORM 我必须更新数据库中的现有实体。这个用例运行良好。

现在我有另一个用例,我收到相同的 MyObjectDto ,除了我想在数据库中创建一个新的。我认为,可行的一件事是使用特定的映射,在其中跳过 id 属性,让我的 ORM 理解这是一个 create 操作,而不是 更新

我认为下面的方法可以解决我的问题:

public <D> D map(Object source,
Class<D> destinationType,
String typeMapName)

只是我不知道如何使用它。到目前为止,我尝试这样做:

    @Bean
public ModelMapper modelMapper() {
ModelMapper modelMapper = new ModelMapper();
TypeMap<MyObjectDto, MyObject> typeMapForNew = modelMapper.createTypeMap(MyObjectDto.class, MyObject.class)
.addMappings(mapping -> mapping.skip(MyObject::setId));

return modelMapper;
}

此方法位于配置内部。然后我想我应该这样调用它,但它给出了法线映射:

    myObject = modelMapper.map(myObjectDto, MyObject.class, "typeMapForNew");

感谢您的阅读。

编辑:对于这个具体示例,我在配置类中做错了。我应该这样做:

    @Bean
public ModelMapper modelMapper() {
ModelMapper modelMapper = new ModelMapper();
modelMapper.createTypeMap(MyObjectDto.class, MyObject.class, "typeMapForNew")
.addMappings(mapping -> mapping.skip(MyObject::setId));

return modelMapper;
}

然后我可以使用命名映射并且它可以工作。我现在需要了解如何跳过对象子实体的 ID 字段。但原来的问题已经得到解答。

最佳答案

根据 REST 准则,您根本不应该在 DTO 中发送 id

创建:

@POST
/rest/items
{ ...dto... } -> mapper -> Entity with null id -> save

更新:

@PUT
/rest/items/{id}
{ ...dto... } -> mapper -> Entity with null id -> set id from URL -> save

关于java - ModelMapper - 如何使用map(source,destination.class,typeMapName)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56874501/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com