2016-09-29 6 views
2

を存在するフィールドを認識しないは、ジャクソンがだからここ

{"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!!!"}]} 

そして、ここでは私の2つのエンティティクラスである私のJSONです:私はEsidesiJobEntityにそのJSON文字列をマッピングする際に、何らかの理由で

@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+"}"; 
    } 
} 

、I次のエラーを取得する:

Unrecognized field "totalSize" 

それは間違いなく両方でJSONとエンティティの両方に存在します!

EsidesiEntity apexJobResponseEntity; 

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

アム私は本当に基本的な何かが欠け:

ここで私は参照のためのエンティティへの文字列をマップするために書いたコードですか?

(ところで、クラス/エンティティ名に、いくつかの矛盾がある場合、その私は、オンラインでそれらを投稿する前に、それらを名前を変更したからです。私が知っていると私はそれを見るように私はそれらを修正します。)

感謝を!

+0

。 –

+0

apexResponseとは何ですか?これはあなたのjsonの文字列ですか? –

+0

実際には、apexResponseは文字列で、apexJobResponseがオブジェクトです。私はこれを少し明確にしましょう。 – Maz

答えて

1

Lombokを使用しています。ジャクソンはあなたのゲッターとセッターメソッドを見ることができません。

だから、あなたは2つのオプションがあります。

  1. は、この追加のライブラリを使用ロンボク
  2. getterメソッドとsetterメソッドをロンボクを使用して実装しないでください:あなたはMavenを使用している場合jackson-lombok

、したがって、pom.xmlにjackson-lombokを追加してください:

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

を設定し、このように、あなたのObjectMapper:私はあなたが apexJobResponse = apexMapper.readValue( "あなたのJSON文字列"、EsidesiEntity.class)以下のようにすればいいと考えてい

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

私はロンボク以外のルートを取ることに決めましたが(少なくとも動作させるためには)、同じエラーが発生します。私はゲッターとセッターに "@JsonProperty(...)"アノテーションを付けて試してみました。 – Maz

+0

Hm。さて、私はメソッドを注釈する必要はないと確信しています。あなたは最新のjacksonバージョンを使用していますか? – dit

+0

メソッド名はJSONプロパティではなくJava変数に似ているので、私はそれらも同様に注釈を付けることができると仮定していました。しかし、それは動作しませんでした。 – Maz

関連する問題