【问题标题】:How to map only selected fields using mapstruct如何使用 mapstruct 仅映射选定的字段
【发布时间】:2021-04-25 14:05:35
【问题描述】:

如何使用 mapStruct 仅映射选定的字段并返回它们作为响应。

例如:

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 的位置。

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

我怎样才能只公开那些选定的字段?

【问题讨论】:

    标签: java mapping mapstruct


    【解决方案1】:

    当您只想映射某些字段而忽略其他所有内容时,您可以使用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,您可以定义要映射的属性。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        像这样更改您的 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); 
        }
        

        【讨论】:

        • 映射器的目标是映射任何包含字段的字段。在 CarDTO 类中解压缩所有组合比例是不切实际的。
        猜你喜欢
        • 2018-09-06
        • 1970-01-01
        • 2017-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-09
        • 2018-07-29
        • 2019-03-14
        相关资源
        最近更新 更多