mapstruct - ネストされたオブジェクトのコレクションに伝播親フィールド値

antohoho:

それは、ネストされたオブジェクトのコレクションに親オブジェクトフォーム値を伝播することは可能ですか?例えば

ソースDTOクラス

class CarDTO {
  private String name;
  private long userId;
  private Set<WheelDto> wheels; 
};

class WheelDto {
  private String name;
}

ターゲットエンティティクラス

class Car {
  private String name;
  private long userId;
  private Set<Wheel> wheels; 
};

class Wheel {
  private String name;
  private long lastUserId;
}

あなたは、私がWheelDtoにlastUserIdを持っていない見ることができたとして、それゆえ私は、私が試した、車輪のコレクション内の各オブジェクトにWheelDtoにlastUserIdにCarDtoからのuserIdをマッピングしたいと思います

@Mapping(target = "wheels.lastUserId", source = "userId") 

しかし運ません

フィリップ:

現在はプロパティを渡すことはできません。ただし、経由でこれを解決することができ@AfterMapping、および/または@Context

カーマッピング後の更新ホイール

これは、しかし、あなたが上で二回反復する必要があるだろうことを意味しますWheelそれはのように見ることができます

@Mapper
public interface CarMapper {

    Car map(CarDto carDto);

    @AfterMapping
    default void afterCarMapping(@MappingTarget Car car, CarDto carDto) {
        car.getWheels().forEach(wheel -> wheel.setLastUserId(carDto.getUserId()));
    }
}

マッピング・ホイールがマッピング時の状態を持つようにしながら、@Contextを渡し

あなたはを通して一度だけ反復処理したい場合はWheel、あなたが渡すことができます@ContextからのuserIdになるだろうオブジェクトCarDto車をマッピングする前に、その後にそれを設定しWheelた後、マッピングでは。このマッパーは次のように見ることができます:

@Mapper
public interface CarMapper {

    Car map(CarDto carDto, @Context CarContext context);

    Wheel map(WheelDto wheelDto, @Context CarContext context);

}

public class CarContext {

    private String lastUserId;

    @BeforeMapping
    public void beforeCarMapping(CarDto carDto) {
        this.lastUserId = carDto.getUserId();
    }

    @AfterMapping
    public void afterWheelMapping(@MappingTarget Wheel wheel) {
        wheel.setLastUserId(lastUserId);
    }

}

CarContextホイールマッピングメソッドに渡されます。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=200556&siteId=1