Извлечение полей из пар ключ-значение из списка карт с помощью MapStruct - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь извлечь поля из сложного JSON в целевой класс, например: пары ключ-значение из List>.

В моем случае что-то очень похоже на этот вопрос о переполнении стека Сопоставление вложенных списков с использованием MapStruct Но в моем случае вместо List<Course> у меня есть List<Map<String, Object>

Источник ввода: JSONObject Целевой объект вывода: Location

Я хочу извлечь ключ карты -value пары locationId, documentActionCode, documentStatusCode из массива location (из ввода JSON) в целевой объект (Location) с использованием MapStruct, я что-то пробовал, но получаю ошибку ниже. Может ли кто-нибудь помочь решить эту проблему?

Ошибка получения: Получение той же ошибки для других 2 полей

Error:(21, 14) java: No property named "location.locationId" exists in source parameter(s). Did you mean "empty"?

Ожидаемый целевой результат: класс местоположения мой Целевой класс

{
  "locationId": "1000",
  "documentStatusCode": "CLASSIFICATION",
  "documentActionCode": "CHANGE_BY_UPDATE"
}

Исходный ввод:

 {
  "Header": {
    "Sender": "M1.XXXXX",
    "Receiver": [
      "C1"
    ],
    "MessageId": "d2828e60-ee4b-11e9-9653-36415d6814e7-00010828",
    "Type": "location",
    "CreationDateAndTime": "2019-10-14T11:58:23.324+05:30",
    "Model": "STADARD",
    "MessageVersion": "1.0"
  },
  "location": [
    {
      "creationDateTime": "2019-10-14T11:58:23.367+05:30",
      "documentStatusCode": "CLASSIFICATION",
      "documentActionCode": "CHANGE_BY_UPDATE",
      "lastUpdateDateTime": "2019-10-14T11:58:23.367+05:30",
      "locationId": "1000",
      "parentParty": {
        "primaryId": "1001",
        "secondaryId": "1002",
        "additionalPartyIdentification": [
          {
            "typeCode": "UNKNOWN",
            "additionalPartyIdentificationTypeCode": "UNKNOWN",
            "value": "0000001000"
          }
        ],
        "parentRole": "CUSTOMER"
      },
      "avpList": {
        "attributeValuePairList": [
          {
            "attributeName": "senderDocumentIdentification",
            "value": "4677638"
          }
        ]
      }
    }
  ]
}

Я пробовал использовать этот Mapper logi c, я знаю, что что-то отсутствует в logi c для достижения желаемого, как писать не получая как писать logi c ??? Нужна помощь.

SourceLocationMapper

import org.json.simple.JSONObject;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.ReportingPolicy;
import org.mapstruct.factory.Mappers;


@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface SourceLocationMapper {
    SourceLocationMapper MAPPER = Mappers.getMapper( SourceLocationMapper.class );

    @Mapping(target = "locationId", source = "location.locationId")
    @Mapping(target = "documentStatusCode", source = "location.documentStatusCode")
    @Mapping(target = "documentActionCode", source = "location.documentActionCode")
    Location toLocation(JSONObject jsonObject);
}

Main Class

public class Main {

    public static void main( String[] args ) {
        JsonUtil jsonUtil = new JsonUtil(); //This load my input JSON file content into JSONObject
        JSONObject jsonObject = jsonUtil.getJsonObject(); 
        Location location = SourceLocationMapper.MAPPER.toLocation(jsonObject);
        System.out.println(location);

    }
}
...