2017-08-15 2 views
1

fehlgeschlagen Ich versuche, meine Json zu POJO-Klasse mit Jackson zuordnen, aber ich erhalte null Werte. Wenn ich @JsonIgnoreProperties entfernen Anmerkung dann wirft es Ausnahme der nicht erfassten EigenschaftJSON-String zu Java-Objekt-Mapping mit 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 
     } 
    ] 
} 

ich diesen json als String bin immer und dann diese Zeichenfolge Java-Objekt zu konvertieren versuchen.

Hier sind meine POJO Klassen:

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; 
    } 

} 

Meine Testverfahren zu überprüfen, ob das Ergebnis auf JSON-Objekt zugeordnet wurde:

@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

Nicht verwandt: bitte lesen Sie über Java Namenskonventionen. Feldnamen gehen auch camelCase. Deine Gewohnheit, UpperCase zu gehen, verwirrt alle anderen. – GhostCat

+0

Und dann: lesen Sie über [MCVE]. Zeige ein ** minimales ** Beispiel. Warum sollte man ein 3-schichtiges geschachteltes Beispiel aufstellen, wenn wahrscheinlich etwas viel Einfacheres tun würde? – GhostCat

+0

heilige Guacomoley. Bitte editieren Sie Ihre Frage und machen Sie alle Klassenfelder camelCase. Es ist schwer zu sehen, was eine Klasse ist und was ein Feld ist. – Tschallacka

Antwort

1

Ihre POJO Strukturen ungültig. Check out http://www.jsonschema2pojo.org - ein Online-Tool zum Generieren von Java-POJOs aus JSON.

Ihre Klassen sollten mehr oder weniger wie unten aussehen, aber Sie müssen ActiveF und TileName Felder mit bevorzugten Typen ersetzen.

-----------------------------------com.example.Announcement.java----------------------------------- 

package com.example; 

import java.util.HashMap; 
import java.util.Map; 
import com.fasterxml.jackson.annotation.JsonAnyGetter; 
import com.fasterxml.jackson.annotation.JsonAnySetter; 
import com.fasterxml.jackson.annotation.JsonIgnore; 
import com.fasterxml.jackson.annotation.JsonInclude; 
import com.fasterxml.jackson.annotation.JsonProperty; 
import com.fasterxml.jackson.annotation.JsonPropertyOrder; 

@JsonInclude(JsonInclude.Include.NON_NULL) 
@JsonPropertyOrder({ 
     "Title", 
     "Description", 
     "AnnouncementType", 
     "ActiveF", 
     "TileName" 
}) 
public class Announcement { 

    @JsonProperty("Title") 
    private String title; 
    @JsonProperty("Description") 
    private String description; 
    @JsonProperty("AnnouncementType") 
    private String announcementType; 
    @JsonProperty("ActiveF") 
    private Object activeF; 
    @JsonProperty("TileName") 
    private Object tileName; 
    @JsonIgnore 
    private Map<String, Object> additionalProperties = new HashMap<String, Object>(); 

    @JsonProperty("Title") 
    public String getTitle() { 
     return title; 
    } 

    @JsonProperty("Title") 
    public void setTitle(String title) { 
     this.title = title; 
    } 

    @JsonProperty("Description") 
    public String getDescription() { 
     return description; 
    } 

    @JsonProperty("Description") 
    public void setDescription(String description) { 
     this.description = description; 
    } 

    @JsonProperty("AnnouncementType") 
    public String getAnnouncementType() { 
     return announcementType; 
    } 

    @JsonProperty("AnnouncementType") 
    public void setAnnouncementType(String announcementType) { 
     this.announcementType = announcementType; 
    } 

    @JsonProperty("ActiveF") 
    public Object getActiveF() { 
     return activeF; 
    } 

    @JsonProperty("ActiveF") 
    public void setActiveF(Object activeF) { 
     this.activeF = activeF; 
    } 

    @JsonProperty("TileName") 
    public Object getTileName() { 
     return tileName; 
    } 

    @JsonProperty("TileName") 
    public void setTileName(Object tileName) { 
     this.tileName = tileName; 
    } 

    @JsonAnyGetter 
    public Map<String, Object> getAdditionalProperties() { 
     return this.additionalProperties; 
    } 

    @JsonAnySetter 
    public void setAdditionalProperty(String name, Object value) { 
     this.additionalProperties.put(name, value); 
    } 

} 
-----------------------------------com.example.SPOAnnouncement.java----------------------------------- 

package com.example; 

import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import com.fasterxml.jackson.annotation.JsonAnyGetter; 
import com.fasterxml.jackson.annotation.JsonAnySetter; 
import com.fasterxml.jackson.annotation.JsonIgnore; 
import com.fasterxml.jackson.annotation.JsonInclude; 
import com.fasterxml.jackson.annotation.JsonProperty; 
import com.fasterxml.jackson.annotation.JsonPropertyOrder; 

@JsonInclude(JsonInclude.Include.NON_NULL) 
@JsonPropertyOrder({ 
     "TileLevel", 
     "SystemLevel", 
     "Announcements" 
}) 
public class SPOAnnouncement { 

    @JsonProperty("TileLevel") 
    private List<Object> tileLevel = null; 
    @JsonProperty("SystemLevel") 
    private List<SystemLevel> systemLevel = null; 
    @JsonProperty("Announcements") 
    private List<Announcement> announcements = null; 
    @JsonIgnore 
    private Map<String, Object> additionalProperties = new HashMap<String, Object>(); 

    @JsonProperty("TileLevel") 
    public List<Object> getTileLevel() { 
     return tileLevel; 
    } 

    @JsonProperty("TileLevel") 
    public void setTileLevel(List<Object> tileLevel) { 
     this.tileLevel = tileLevel; 
    } 

    @JsonProperty("SystemLevel") 
    public List<SystemLevel> getSystemLevel() { 
     return systemLevel; 
    } 

    @JsonProperty("SystemLevel") 
    public void setSystemLevel(List<SystemLevel> systemLevel) { 
     this.systemLevel = systemLevel; 
    } 

    @JsonProperty("Announcements") 
    public List<Announcement> getAnnouncements() { 
     return announcements; 
    } 

    @JsonProperty("Announcements") 
    public void setAnnouncements(List<Announcement> announcements) { 
     this.announcements = announcements; 
    } 

    @JsonAnyGetter 
    public Map<String, Object> getAdditionalProperties() { 
     return this.additionalProperties; 
    } 

    @JsonAnySetter 
    public void setAdditionalProperty(String name, Object value) { 
     this.additionalProperties.put(name, value); 
    } 

} 
-----------------------------------com.example.SystemLevel.java----------------------------------- 

package com.example; 

import java.util.HashMap; 
import java.util.Map; 
import com.fasterxml.jackson.annotation.JsonAnyGetter; 
import com.fasterxml.jackson.annotation.JsonAnySetter; 
import com.fasterxml.jackson.annotation.JsonIgnore; 
import com.fasterxml.jackson.annotation.JsonInclude; 
import com.fasterxml.jackson.annotation.JsonProperty; 
import com.fasterxml.jackson.annotation.JsonPropertyOrder; 

@JsonInclude(JsonInclude.Include.NON_NULL) 
@JsonPropertyOrder({ 
     "Title", 
     "Description", 
     "AnnouncementType", 
     "ActiveF", 
     "TileName" 
}) 
public class SystemLevel { 

    @JsonProperty("Title") 
    private String title; 
    @JsonProperty("Description") 
    private String description; 
    @JsonProperty("AnnouncementType") 
    private String announcementType; 
    @JsonProperty("ActiveF") 
    private Object activeF; 
    @JsonProperty("TileName") 
    private Object tileName; 
    @JsonIgnore 
    private Map<String, Object> additionalProperties = new HashMap<String, Object>(); 

    @JsonProperty("Title") 
    public String getTitle() { 
     return title; 
    } 

    @JsonProperty("Title") 
    public void setTitle(String title) { 
     this.title = title; 
    } 

    @JsonProperty("Description") 
    public String getDescription() { 
     return description; 
    } 

    @JsonProperty("Description") 
    public void setDescription(String description) { 
     this.description = description; 
    } 

    @JsonProperty("AnnouncementType") 
    public String getAnnouncementType() { 
     return announcementType; 
    } 

    @JsonProperty("AnnouncementType") 
    public void setAnnouncementType(String announcementType) { 
     this.announcementType = announcementType; 
    } 

    @JsonProperty("ActiveF") 
    public Object getActiveF() { 
     return activeF; 
    } 

    @JsonProperty("ActiveF") 
    public void setActiveF(Object activeF) { 
     this.activeF = activeF; 
    } 

    @JsonProperty("TileName") 
    public Object getTileName() { 
     return tileName; 
    } 

    @JsonProperty("TileName") 
    public void setTileName(Object tileName) { 
     this.tileName = tileName; 
    } 

    @JsonAnyGetter 
    public Map<String, Object> getAdditionalProperties() { 
     return this.additionalProperties; 
    } 

    @JsonAnySetter 
    public void setAdditionalProperty(String name, Object value) { 
     this.additionalProperties.put(name, value); 
    } 

} 

Denken Sie daran, diese zu serialisieren, wenn Sie einen Webservice erstellen;).

Verwandte Themen