Я пытаюсь извлечь поля из сложного 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);
}
}