Saltar al contenido

¿Cómo usar el mapa explícito con Java 8 y ModelMapper?

Solución:

Perdieron un paso en este ejemplo, el addMappings El método que utilizan es el addMappings de TypeMap, no de ModelMapper. Necesitas definir un TypeMap para tus 2 objetos. De esta manera:

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

Otra forma sería utilizar el addMappings método de ModelMapper. No usa lambdas y toma un PropertyMap. También es lo suficientemente corto:

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

si el tipo de origen y destino son diferentes. Por ejemplo,

@Entity
class Student {
    private Long id;
    
    @OneToOne
    @JoinColumn(name = "laptop_id")
    private Laptop laptop;
}

Y Dto ->

class StudentDto {
    private Long id;
    private LaptopDto laptopDto;
}

Aquí, los tipos de origen y destino son diferentes. Entonces, si sus MatchingStrategies son ESTRICTAS, no podrá mapear entre estos dos tipos diferentes. Ahora para resolver esto, simplemente coloque este código a continuación en el constructor de su clase de controlador o cualquier clase en la que desee usar ModelMapper->

private ModelMapper modelMapper;

public StudentController(ModelMapper modelMapper) {
    this.modelMapper = modelMapper;
    this.modelMapper.typeMap(Student.class, StudentDto.class).addMapping(Student::getLaptop, StudentDto::setLaptopDto);
}
        

Eso es todo. Ahora puede usar ModelMapper.map (origen, destino) fácilmente. Se mapeará automáticamente

modelMapper.map(student, studentDto);
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *