2016-09-29 1 views
2

existieren Also hier meine JSONJackson nicht erkennen Felder, die

{"totalSize":46,"done":true,"records":[{"Name":"Wamu I","Start_Date__c":"2016-09-26T16:56:10.000+0000","Status__c":"Completed","Type__c":"Your were expecting success, but In reality it was I, Dio!!!"}]} 

Und hier meine zwei Entitätsklassen sind:

@JsonIgnoreProperties(ignoreUnknown = true) 
public class EsidesiJobEntity { 

    @JsonProperty("totalSize") 
    private @Getter @Setter Integer totalSize; 

    @JsonProperty("done") 
    private @Getter @Setter Boolean isDone; 

    @JsonProperty("records") 
    private @Getter @Setter List<KarsEntity> records; 

    @Override 
    @JsonIgnore 
    public String toString(){ 

     List<String> recordsObjectString = new ArrayList<String>(); 

     this.records.forEach((record) -> 
     { 
      recordsObjectString.add(record.toString()); 
     }); 
     return "{ totalSize:"+this.totalSize+", isDone:"+this.isDone+", records:["+recordsObjectString.toString()+"]"; 
    } 

} 

@JsonIgnoreProperties(ignoreUnknown = true) 
public class KarsEntity { 

    @JsonProperty("Name") 
    private @Getter @Setter String name; 

    @JsonProperty("Start_Date__c") 
    private @Getter @Setter String startDate; 

    @JsonProperty("Status__c") 
    private @Getter @Setter String status; 

    @Override 
    public String toString(){ 
     return "{ name:"+this.name+", startDate:"+this.startDate+", status:"+this.status+"}"; 
    } 
} 

aus irgendeinem Grund, wenn ich Karte, die JSON-String an den EsidesiJobEntity, I erhalten den folgenden Fehler:

Unrecognized field "totalSize" 

ABER ES BESTEHT dEFINITIV IN BEIDEN sowohl in der JSON und das Unternehmen!

Hier ist der Code, den ich die Zeichenfolge an das Unternehmen als Referenz zur Karte geschrieben:

EsidesiEntity apexJobResponseEntity; 

ObjectMapper apexMapper = new ObjectMapper(); 
try { 
    apexJobResponseEntity = apexMapper.readValue(apexResponseString, EsidesiEntity.class); 
} ... 

Bin ich etwas wirklich grundlegende fehlt?

(BTW, Wenn es einige Inkonsistenzen in der Klasse/Entity-Namen, seine weil ich umbenannt, bevor sie online veröffentlichen. Lassen Sie mich wissen, und ich werde sie beheben, wie ich sie sehe.)

Dank!

+0

Ich glaube, Sie wie unten apexJobResponse = apexMapper.readValue ("Ihre json string", EsidesiEntity.class) tun sollte; –

+0

Was ist ApexResponse? Ist das deine JSON-Saite? –

+0

tatsächlich ist ApexResponse ein String und ApexJobResponse ist das Objekt. Lass mich das ein wenig klarer machen. – Maz

Antwort

1

Sie verwenden Lombok. Jackson kann deine Getter- und Setter-Methoden nicht sehen.

So haben Sie zwei Möglichkeiten:

  1. nicht Lombok verwenden und die Getter und Setter-Methoden
  2. Verwenden Lombok mit dieser zusätzlichen Bibliothek implementieren: jackson-lombok

Wenn Sie Maven verwenden, Fügen Sie also jackson-lombok zu Ihrem pom.xml hinzu:

<dependency> 
    <groupId>com.xebia</groupId> 
    <artifactId>jackson-lombok</artifactId> 
    <version>1.1</version> 
</dependency> 

konfigurieren dann ObjectMapper auf diese Weise:

ObjectMapper apexMapper = new ObjectMapper(); 
apexMapper.setAnnotationIntrospector(new JacksonLombokAnnotationIntrospector()); 
[...] 
+0

Also entschied ich mich dafür, die Nicht-Lombok-Route zu nehmen (zumindest um es zum Laufen zu bringen), aber den gleichen Fehler zu bekommen. Ich habe es mit und ohne "@JsonProperty (...)" Annotationen auf den Gettern und Setter versucht. – Maz

+0

Hm. Ok, ich bin sicher, dass es keine Notwendigkeit gibt, die Methoden zu kommentieren. Sind Sie sicher, dass Sie die neueste Jackson-Version verwenden? – dit

+0

Ich nahm an, da die Methodennamen den Java-Variablen und nicht den JSON-Eigenschaften ähneln, die ich ebenso gut mit Anmerkungen versehen kann. Es hat aber nicht funktioniert. – Maz

Verwandte Themen