невозможно передать значения из нескольких родительских объектов для отображения через mapstruct - PullRequest
0 голосов
/ 12 апреля 2020

Я сопоставляю сценарий, в котором один объект родительского класса необходимо сопоставить на дочернем уровне. Теперь я не могу передать этот параметр объекта через метод сопоставления.

Mapper class:

@Mapping(target = "segment", source = "flightSegment")
@Mapping(target = "PTC", source = "passengerFlight")
Itinerary mapProductAirToItinerary(ProductAir productAir);

List<PTC> mapPassengerFlightToPTC(List<PassengerFlight> passengerFlight);

@Mapping( target = "code", source = "passengerTypeCode")
@Mapping( target = "numberOfPassengers", source = "passengerQuantity")
@Mapping( target = "id", source = ***unknown***)
PTC createSOAPTCfromODflightProduct(PassengerFlight passengerFlight);

В приведенном выше сопоставлении ProductAir имеет строковый объект с именем ID, который требуется сопоставить в методе createSOAPTCfromODflightProduct с целевым идентификатором. Здесь я сохранил неизвестность, так как не могу передать ему значение productAir.id через mapPassengerFlightToPT C и создать метод сопоставления SOAPTCfromODflightProduct. Есть ли в любом случае, я могу передать значение с родительского уровня на уровень отображения ребенка? Структура воздуха продукта приведена ниже, поэтому я хочу отобразить id -> p0 с идентификатором PT C object

"@type": "ProductAir",
      "totalDuration": "PT3H54M",
      "id": "p0",
      "FlightSegment": [
        {
          "id": "s1",
          "sequence": 1,
          "Flight": {
            "@type": "Flight",
            "duration": "PT3H54M",
            "carrier": "AA",
            "number": "2793",
            "operatingCarrier": "AA",
            "operatingCarrierName": "American Airlines",
            "equipment": "738",
            "id": "f1",
            "Departure": {
              "@type": "Departure",
              "location": "DEN",
              "date": "2020-07-09",
              "time": "23:40:00"
            },
            "Arrival": {
              "@type": "Arrival",
              "location": "MIA",
              "date": "2020-07-10",
              "time": "05:34:00"
            }
          }

1 Ответ

1 голос
/ 13 апреля 2020

так .. вы можете попробовать это:


@Mapping(target = "segment", source = "flightSegment")
@Mapping(target = "PTC", source = "passengerFlight")
Itinerary mapProductAirToItinerary(ProductAir productAir, @Context String id);

List<PTC> mapPassengerFlightToPTC(List<PassengerFlight> passengerFlight, @Context String id);

@Mapping( target = "code", source = "passengerTypeCode")
@Mapping( target = "numberOfPassengers", source = "passengerQuantity")
@Mapping( target = "id", ignore = true )
PTC createSOAPTCfromODflightProduct(PassengerFlight passengerFlight, @Context String id);

@AfterMapping
default void createSOAPTCfromODflightProduct(PassengerFlight passengerFlight, @MappintTarget PTC target, @Context String id) {
     target.setId( id );
}


...