web-dev-qa-db-fra.com

Comment utiliser Explicit Map avec Java 8 et ModelMapper?

J'apprends à utiliser ModelMapper par la documentation officielle http://modelmapper.org/getting-started/

Il existe un exemple de code pour le mappage explicite à l'aide de Java 8

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

Comment utiliser correctement ce code? Lorsque je tape cet extrait de code dans IDE, IDE affichez-moi un message cannot resolve method map

enter image description here

12
hudrogen

Ils ont manqué une étape dans cet exemple, la méthode addMappings qu'ils utilisent est la addMappings de TypeMap , pas de ModelMapper. Vous devez définir un TypeMap un pour vos 2 objets. Par ici:

// 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);
});

Une autre façon serait d'utiliser la méthode addMappings de ModelMapper. Il n'utilise pas de lambdas et prend un PropertyMap . C'est assez court aussi:

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