Aide pour une custom deserialization JAVA

Aide pour une custom deserialization JAVA - Java - Programmation

Marsh Posté le 04-06-2019 à 11:24:02    

Bonjour,
 
Petit soucie de logique, et je souhaiterais avoir votre aide ou une autre direction à suivre.
 
Je pose déjà les bases du code pour plus de compréhension :  
 
un fichier JSON

Code :
  1. [
  2.   {
  3.     "name": "BFA",
  4.     "entityType": "secteur",
  5.     "rootEntity": ""
  6.   },
  7.     {
  8.     "name": "IT",
  9.     "entityType": "service",
  10.     "rootEntity": ""
  11.   },
  12.   {
  13.     "name": "EX",
  14.     "entityType": "offre",
  15.     "rootEntity": "BFA"
  16.   }
  17. ]

 
 
une Entité :

Code :
  1. @JsonDeserialize(using = EntityDeserialization.class)
  2. public class Entity {
  3.     private String name;
  4.     private String entityType;
  5.     private Entity rootEntity; ...


 
Une classe pour la custom deserialization :  
 

Code :
  1. public Entity deserialize(JsonParser jp, DeserializationContext ctxt)
  2.             throws IOException {
  3.         JsonNode node = jp.getCodec().readTree(jp);
  4.         String name =  node.get("name" ).asText();
  5.         String entitype = node.get("entityType" ).asText();
  6.         String rootEntity = node.get("rootEntity" ).asText();
  7.         Entity entity = new Entity();
  8.         entity = entity.searchEntity(entities, rootEntity);
  9.         return new Entity(name, entitype,entity);
  10.     }


 
le MAIN :

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


 
Ici il faut se focus sur la classe Deserialization et le main.
 
Dans le main, je prends mon fichier jSON et avec l'aide de la lib jackson je le deserialize pour créer une list d'entité ( List<Entity> entities).
Mais comme dans mon JSON, j'ai un objet (Entity) embbeded . rootEntity est lui meme un object Entity. Je fais une custom deserialization.  
 
Est la problème,  j'ai une fonction searchEntity qui prend en paramètre un nom (string) et  la liste d'entité qui est justement entrain de se créer et qui se trouve dans le MAIN.  (j'ai l'impression que c'est une sorte de récursivité)
En gros la fonction searchEntity parcours la liste (avec stream.filter) et me return un object (Entity) ou null.
 
Ai je été assez clair? Avez vous une idée de comment résoudre ce problème?
 
Merci
Raphael
 
 

Reply

Marsh Posté le 04-06-2019 à 11:24:02   

Reply

Marsh Posté le 04-06-2019 à 16:38:57    

Bon j'ai réussi en faisant une double custom deserialization du fichier. (j'ai crée une deuxième classe EntityDeserializatio)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed