如何使用 mapstruct 仅映射选定的字段

How to map only selected fields using mapstruct

如何使用 mapStruct 和 return thenm 仅映射选定的字段作为响应。

例如:

class Location {
         
   String street;
          
   String unit;
    
   int postCode;
 
 }

public class Car {
 
    private Location location;.
}

public class CarDto {

  private Location location;

}

现在我可以使用 :

映射它们
@Mapper
public interface CarMapper {
 
    CarMapper INSTANCE = Mappers.getMapper( CarMapper.class ); 
 
   CarDto returnObject =  CarDto carToCarDto(Car car); 
}

现在,returnObject 将包含具有 street, unit and postCode.

的位置

但是,我只想公开 street and postCode 和 returnObject.location。

如何才能只公开那些选定的字段?

像这样更改您的 CarD:

public class CarDto {

   String street;
   int postCode;

}

在你的映射器中:

@Mapper
public interface CarMapper {
 
   CarMapper INSTANCE = Mappers.getMapper( CarMapper.class ); 
 
   @Mapping(source = "location.street", target = "street")
   @Mapping(source = "location.postCode", target = "postCode")
   CarDto returnObject =  CarDto carToCarDto(Car car); 
}

如果你想忽略目标对象中的某些字段,只需简单地在 MapStruct @Mapping 注释中指出它,如下所示:

@Mapping(target = "location.postCode", ignore = true)
CarDto carToCarDto(Car car);

当您只想映射某些字段而忽略其他所有内容时,您可以使用 BeanMapping#ignoreByDefault.

例如

@Mapper
public interface CarMapper {

    CarMapper INSTANCE = Mappers.getMapper( CarMapper.class ); 
 
    @BeanMapping(ignoreByDefault = true)
    @Mapping(target = "street", source = "location.street")
    @Mapping(target = "postCode", source = "location.postCode")
    CarDto carToCarDto(Car car); 

}

通过使用 @BeanMapping(ignoreByDefault = true),您将忽略所有属性。通过使用 @Mapping,您可以定义要映射的属性。