Использование Джексона, как сопоставить JSON с объектами, если он содержит список объектов - PullRequest
1 голос
/ 13 июля 2020

Вот моя JSON полезная нагрузка

{
  "allEnvs": ["qa", "dev", "prestaging"],
  "env": "qa",
  "envUrls": [{
    "qa": {
      "cutomeUrl": "testUrl",
      "adminUrl": "",
      "webUrl": "https://test.try.val",
      "salesUrl": ""
    },
      "dev": {
      "cutomeUrl": "testUrl",
      "webUrl": "",
      "salesUrl": ""
    },
    "prestaging": {
      "cutomeUrl": "testUrl",
      "webUrl": "",
      "salesUrl": ""
    }
  }],
  "isCommonUsers": "true",
  "commonUsers":[ {
    "teacher": {
      "fName": "test",
      "lName": "test"
    },
    "student": {
      "fName": "test",
      "lName": "test"
    },
    "ta": {
      "fName": "test",
      "lName": "test"
    }
  }],
  "commonCodes": ["test1", "test2", "test3"]
}

Я хотел бы знать, как сопоставить 'envUrls', 'commonUsers' для моего 'Conf.class'

ObjectMapper mapper = new ObjectMapper();
CommonConf cnf = mapper.readValue( new File("src/main/resources/configs/config.json"), Conf.class);

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

envUrls и commonUsers свойства могут быть представлены типом List<Map<String, PojoX>>, где PojoX - это EnvUrls или User из модели ниже:

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.json.JsonMapper;
import lombok.Data;
import lombok.ToString;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;

public class CommonConfApp {
    public static void main(String[] args) throws IOException {
        File jsonFile = new File("./resource/test.json").getAbsoluteFile();

        ObjectMapper mapper = JsonMapper.builder().build();

        System.out.println(mapper.readValue(jsonFile, CommonConf.class));
    }

}

@Data
@ToString
class CommonConf {

    private List<String> allEnvs;
    private String env;
    private List<Map<String, EnvUrls>> envUrls;
    private String isCommonUsers;
    private List<Map<String, User>> commonUsers;
    private List<String> commonCodes;
}

@Data
@ToString
class EnvUrls {

    private String cutomeUrl;
    private String adminUrl;
    private String webUrl;
    private String salesUrl;
}

@Data
@ToString
class User {

    @JsonProperty("fName")
    private String fName;

    @JsonProperty("lName")
    private String lName;
}

Lombok используется для удаления шаблонного кода. Выше приложение печатает:

CommonConf(allEnvs=[qa, dev, prestaging], env=qa, envUrls=[{qa=EnvUrls(cutomeUrl=testUrl, adminUrl=, webUrl=https://test.try.val, salesUrl=), dev=EnvUrls(cutomeUrl=testUrl, adminUrl=null, webUrl=, salesUrl=), prestaging=EnvUrls(cutomeUrl=testUrl, adminUrl=null, webUrl=, salesUrl=)}], isCommonUsers=true, commonUsers=[{teacher=User(fName=test, lName=test), student=User(fName=test, lName=test), ta=User(fName=test, lName=test)}], commonCodes=[test1, test2, test3])
0 голосов
/ 13 июля 2020

Вы можете аннотировать свой класс Conf следующим образом:

@JsonIgnoreProperties(ignoreUnknown = true)
public class Conf {
   ...
}

Он игнорирует неизвестные свойства при синтаксическом анализе JSON

Документация: JsonIgnoreProperties

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...