首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在我的场景中使用ModelMapper的最佳方法

在我的场景中使用ModelMapper的最佳方法
EN

Stack Overflow用户
提问于 2021-12-02 07:28:44
回答 1查看 349关注 0票数 0

开始为项目需求编写java spring引导时,我想了解在我的场景中使用ModelMapper的最佳方法是什么。

我有一个模特InputMsg

代码语言:javascript
运行
复制
public class InputMsg {
    String EquipmentNumber;
    //getters setters
}

此外,我还有两个DTO OutputMsgErrorDesc

代码语言:javascript
运行
复制
public class OutputMsg {
    public ErrorDesc EquipmentNumber;
   //getters setters
}

public class ErrorDesc {
    String Value;
    //getters setters
}

我的要求是使用传入的输入消息,最后以OutputMsg格式返回一个结果,然后再进行一些其他计算。

例如:InputMsg -- "ABCD1234“OutputMsg : EquipmentNumber.value = "ABCD1234”

我在ModelMapper中使用的是这样的内容:

代码语言:javascript
运行
复制
ModelMapper modelMapper = new ModelMapper();
PropertyMap <InputMsg, OutputMsg> orderMap = 
        new PropertyMap <InputMsg,OutputMsg>() {
              protected void configure() {
                OutputMsg.getEquipmentNumber()
                    .setValue(InputMsg.getEquipmentNumber());
                }
    modelMapper.addMappings(orderMap);
    return OutputMsg;
}};

我看到的问题是,如果我拥有100的属性,我必须编写100行代码来映射它。

如何更好地将InputMsg值自动映射到Output.Msg

我很感谢你的帮助

EN

回答 1

Stack Overflow用户

发布于 2021-12-04 10:49:52

首先:您应该在字段中遵循Java约定,命名make字段为私有字段(有getters和setter),因此将字段命名如下:

代码语言:javascript
运行
复制
private String equipmentNumber;
private ErrorDesc equipmentNumber;
private value;

然而,这并不重要,但我的示例使用了这样的命名。下面这件事更重要。

最强大的特性(至少是IMO)是,ModelMapper可以在没有任何配置的情况下将某些合适的约定用于字段命名时关联数据。例如,如果您的InputMsg如下所示:

代码语言:javascript
运行
复制
@Getter @Setter
public InputMsg {
    private String equipmentNumberValue;
}

映射将是简单的,并且无需任何配置即可工作。因此,通过适当的设计,您可以减少一堆样板代码。

现在(国际海事组织)人们通常交替使用映射器和适配器。但它们并不完全相同,比如this question。Mapper可以像在ModelMapper配置中配置的那样使用适配器。

问题是,没有一个映射程序能够在不明确告诉它如何适应和需要适配器的情况下进行从A类到B类的复杂/任意的调整。除了制作ModelMapper使用的适配器之外,没有其他解决办法,如果需要处理100个字段,则必须处理。视情况而定,它可能可以以某种通用的方式完成,但它可能会使代码更难理解。

另外,如果您需要为ModelMapper使用大量的适配器代码,那么如果不使用ModelMapper,整个过程可能会更加清楚。

因此,如果可能的话,请尝试更改您的设计,以便ModelMapper可以将其单独关联起来,而不是编写大量的自适应代码。

但是,有了正确的设计并遵循了映射器理解的惯例,好的映射器就可以适应我的示例中的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70195541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档