开始为项目需求编写java spring引导时,我想了解在我的场景中使用ModelMapper的最佳方法是什么。
我有一个模特InputMsg
public class InputMsg {
String EquipmentNumber;
//getters setters
}
此外,我还有两个DTO OutputMsg和ErrorDesc
public class OutputMsg {
public ErrorDesc EquipmentNumber;
//getters setters
}
public class ErrorDesc {
String Value;
//getters setters
}
我的要求是使用传入的输入消息,最后以OutputMsg格式返回一个结果,然后再进行一些其他计算。
例如:InputMsg -- "ABCD1234“OutputMsg : EquipmentNumber.value = "ABCD1234”
我在ModelMapper中使用的是这样的内容:
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
我很感谢你的帮助
发布于 2021-12-04 10:49:52
首先:您应该在字段中遵循Java约定,命名make字段为私有字段(有getters和setter),因此将字段命名如下:
private String equipmentNumber;
private ErrorDesc equipmentNumber;
private value;
然而,这并不重要,但我的示例使用了这样的命名。下面这件事更重要。
最强大的特性(至少是IMO)是,ModelMapper可以在没有任何配置的情况下将某些合适的约定用于字段命名时关联数据。例如,如果您的InputMsg
如下所示:
@Getter @Setter
public InputMsg {
private String equipmentNumberValue;
}
映射将是简单的,并且无需任何配置即可工作。因此,通过适当的设计,您可以减少一堆样板代码。
现在(国际海事组织)人们通常交替使用映射器和适配器。但它们并不完全相同,比如this question。Mapper可以像在ModelMapper配置中配置的那样使用适配器。
问题是,没有一个映射程序能够在不明确告诉它如何适应和需要适配器的情况下进行从A类到B类的复杂/任意的调整。除了制作ModelMapper使用的适配器之外,没有其他解决办法,如果需要处理100个字段,则必须处理。视情况而定,它可能可以以某种通用的方式完成,但它可能会使代码更难理解。
另外,如果您需要为ModelMapper使用大量的适配器代码,那么如果不使用ModelMapper,整个过程可能会更加清楚。
因此,如果可能的话,请尝试更改您的设计,以便ModelMapper可以将其单独关联起来,而不是编写大量的自适应代码。
但是,有了正确的设计并遵循了映射器理解的惯例,好的映射器就可以适应我的示例中的内容。
https://stackoverflow.com/questions/70195541
复制相似问题