如何在Java 8和ModelMapper中使用显式映射?

hud*_*gen 13 java java-8 modelmapper

我通过官方文档http://modelmapper.org/getting-started/学习如何使用ModelMapper

有使用java 8进行显式映射的代码示例

modelMapper.addMappings(mapper -> {
  mapper.map(src -> src.getBillingAddress().getStreet(),
      Destination::setBillingStreet);
  mapper.map(src -> src.getBillingAddress().getCity(),
      Destination::setBillingCity);
});
Run Code Online (Sandbox Code Playgroud)

如何正确使用此代码?当我在IDE中键入此代码段时,IDE会显示消息"无法解析方法映射" 在此输入图像描述

Ben*_*aye 38

我认为该示例调用addMappings实际上是TypeMap.这有效:

// Create your mapper
ModelMapper modelMapper = new ModelMapper();

// Create a TypeMap for your mapping
TypeMap<Order, OrderDTO> typeMap = 
    modelMapper.createTypeMap(Order.class, OrderDTO.class);

// Define the mappings on the type map
typeMap.addMappings(mapper -> {
    mapper.map(src -> src.getBillingAddress().getStreet(), 
                      OrderDTO::setBillingStreet);
    mapper.map(src -> src.getBillingAddress().getCity(), 
                      OrderDTO::setBillingCity);
});
Run Code Online (Sandbox Code Playgroud)

没有lambdas的另一种方法是简单地给出addMappings一个PropertyMap.不是lambda而是足够短:

ModelMapper modelMapper = new ModelMapper();
modelMapper.addMappings(new PropertyMap<Order, OrderDTO>() {
  @Override
  protected void configure() {
    map().setBillingStreet(source.getBillingAddress().getStreet());
    map().setBillingCity(source.getBillingAddress().getCity());
  }
});
Run Code Online (Sandbox Code Playgroud)

  • 我希望java库的作者能够明确地使用他们的例子.我正在挖掘这个页面三天,试图找出如何做到这一点. (6认同)
  • 有什么想法为什么第一种方法会抛出错误而第二种方法有效......?顺便说一句,这就是我的情况 (2认同)