как сделать (рекурсивную?) кастомную десериализацию - PullRequest
0 голосов
/ 03 июня 2019

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

для упрощения: у меня есть один файл JSON, одна сущность, один класс десериализации и основной

сосредоточиться на EntityDeserialization (функция searchEntitie, которая принимает в качестве параметров param) и Main (переменная entity)

Entity.json (rootEntity является объектом Entity)

[
  {
    "name": "BFA",
    "entityType": "secteur",
    "rootEntity": ""

  },
    {
    "name": "IT",
    "entityType": "service",
    "rootEntity": ""

  },
  {
    "name": "EX",
    "entityType": "offre",
    "rootEntity": "BFA"
  }
]

Сущность класса

@JsonDeserialize(using = EntityDeserialization.class)
public class Entity {
    private String name;
    private String entityType;
    private Entity rootEntity;

EntityDeserialization

 public Entity deserialize(JsonParser jp, DeserializationContext ctxt)
            throws IOException {
        JsonNode node = jp.getCodec().readTree(jp);
        String name =  node.get("name").asText();
        String entitype = node.get("entityType").asText();
        String rootEntity = node.get("rootEntity").asText();
        Entity entity = new Entity();
        entity = entity.searchEntity(entities, rootEntity);
        return new Entity(name, entitype,entity);
    }

Главная

 public static void main(String[] args) throws FileNotFoundException {
        com.fasterxml.jackson.databind.ObjectMapper mapper = new ObjectMapper();
        mapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
        TypeReference<List<User>> typeReferenceUser = new TypeReference<>() {};
        TypeReference<List<Entity>> typeReferenceEntity = new TypeReference<>() {};
        FileInputStream inputStreamUser = new FileInputStream("C:\\Users\\oraph\\Desktop\\user.json");
        FileInputStream inputStreamEntity = new FileInputStream("C:\\Users\\oraph\\Desktop\\entity.json");
        try {
           List<User> users = mapper.readValue(inputStreamUser,typeReferenceUser);
           List<Entity> entities = mapper.readValue(inputStreamEntity,typeReferenceEntity);
...

Здесь проблемы: Я присутствую, чтобы использовать свою функцию в EntityDeserialization searchEntity(List entity, String rootEntity), которая находится в основном и находится в процессе заполнения.

1 Ответ

0 голосов
/ 10 июня 2019

Я нахожу способ с двумя последовательными десериализацией. Один для заполнения списка сущностей, второй для создания объекта ENtity с этим списком.

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