2017-08-15 4 views
1

J'essaye de mapper ma json à la classe POJO avec Jackson, mais je reçois des valeurs nulles. Si je supprime annotation @JsonIgnoreProperties, elle génère exception des biens non reconnuJSON chaîne à java mappage des objets échoué avec jackson

Json:

{ 
    "TileLevel":[ 

    ], 
    "SystemLevel":[ 
     { 
     "Title":"Test System Level Alert", 
     "Description":"<div class=\"ExternalClassA5AAC8F74C874A2D9DB8337EB6685B2A\"><p>​Test System Level Alert​<br></p><p>check the url http&#58;//www.google.com<br></p><p><span style=\"font-size&#58;32px;\">formatting tested</span><br></p></div>", 
     "AnnouncementType":"System Level", 
     "ActiveF":null, 
     "TileName":null 
     } 
    ], 
    "Announcements":[ 
     { 
     "Title":"Test Announcement", 
     "Description":"<div class=\"ExternalClass16980D07D2FB4AB58A2E97C16B7626D3\"><p>​Testing.....&#160;<img src=\"/sites/salesbk-CN/SiteCollectionImages/Salesbook%20Announcements/AllItems/00007-confiz-test-doc7.png\" alt=\"00007-confiz-test-doc7.png\" style=\"margin&#58;5px;\" /><br></p></div>", 
     "AnnouncementType":"Announcement", 
     "ActiveF":null, 
     "TileName":null 
     } 
    ] 
} 

Je reçois cette JSON sous forme de chaîne, puis essayer de convertir cette chaîne pour objet java.

Voici mes classes POJO:

public class SPOAnnouncement { 

    @JsonIgnoreProperties 
    private Map<String, List<List<SPOAnnouncements_Properties>>> TileLevel; 
    private Map<String, List<List<SPOAnnouncements_Properties>>> SystemLevel; 
    private Map<String, List<List<SPOAnnouncements_Properties>>> Announcements; 

    public Map<String, List<List<SPOAnnouncements_Properties>>> getTileLevel() { 
     return TileLevel; 
    } 

    public void setTileLevel(Map<String, List<List<SPOAnnouncements_Properties>>> tileLevel) { 
     TileLevel = tileLevel; 
    } 

    public Map<String, List<List<SPOAnnouncements_Properties>>> getSystemLevel() { 
     return SystemLevel; 
    } 

    public void setSystemLevel(Map<String, List<List<SPOAnnouncements_Properties>>> systemLevel) { 
     SystemLevel = systemLevel; 
    } 

    public Map<String, List<List<SPOAnnouncements_Properties>>> getAnnouncements() { 
     return Announcements; 
    } 

    public void setAnnouncements(Map<String, List<List<SPOAnnouncements_Properties>>> announcements) { 
     Announcements = announcements; 
    } 
} 

public class SPOAnnouncements_Properties { 


    private String Title; 
    private String Description; 
    private String AnnouncementType; 
    private String ActiveF; 
    private String TileName; 

    public String getTitle() { 
     return Title; 
    } 

    public void setTitle(String title) { 
     Title = title; 
    } 

    public String getDescription() { 
     return Description; 
    } 

    public void setDescription(String description) { 
     Description = description; 
    } 

    public String getAnnouncementType() { 
     return AnnouncementType; 
    } 

    public void setAnnouncementType(String announcementType) { 
     AnnouncementType = announcementType; 
    } 

    public String getActiveF() { 
     return ActiveF; 
    } 

    public void setActiveF(String activeF) { 
     ActiveF = activeF; 
    } 

    public String getTileName() { 
     return TileName; 
    } 

    public void setTileName(String tileName) { 
     TileName = tileName; 
    } 

} 

Ma méthode de test pour vérifier si le résultat a été mis en correspondance objet JSON:

@Test 
public void convertJsonToObject() throws IOException { 

    ObjectMapper mapper = new ObjectMapper(); 
    mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); 
    SPOAnnouncement spoAnnouncement = mapper.readValue(response, SPOAnnouncement.class); 
    System.out.print(spoAnnouncement); 
} 
+3

Sans objet: veuillez lire les conventions de dénomination java. Les noms de champs vont aussi à camelCase. Votre habitude d'aller UpperCase déroute tout le monde. – GhostCat

+0

Et puis: lire à propos de [mcve]. Montrer un exemple ** minimal **. Pourquoi mettre en place un exemple imbriqué à 3 couches, alors que quelque chose de plus simple ferait probablement quelque chose? – GhostCat

+0

saint guacomoley. S'il vous plaît modifier votre question et faire tous les champs de classe camelCase. Il est difficile de voir maintenant ce qu'est une classe et ce qu'est un champ. – Tschallacka

Répondre

1

Vos structures POJO sont invalide. Découvrez http://www.jsonschema2pojo.org - un outil en ligne pour générer des POJO Java à partir de JSON.

Vos classes devraient ressembler plus ou moins à celles ci-dessous, mais vous devrez remplacer les champs ActiveF et TileName par des types prédéfinis. N'oubliez pas de sérialiser celles-ci si vous créez un service Web;).