2017-04-07 10 views
0

私はjacksonとのマッピングを作成するには少し失われています。私のJSONは次のような構造Jackson JsonからPOJOへのマッピング

{ 
    "d": { 
    "__metadata": { 
     "uri": "https://apisalesdemo8.successfactors.com:443/odata/v2/JobApplication(1463L)", 
     "type": "SFOData.JobApplication" 
    }, 
    "lastName": "K", 
    "address": "123 Main Street", 
    "cellPhone": "12345", 
    "firstName": "Katrin", 
    "city": "Anytown", 
    "country": "United States", 
    "custappattachment": { 
     "results": [ 
     { 
      "__metadata": { 
      "uri": "https://apisalesdemo8.successfactors.com:443/odata/v2/Attachment(1188L)", 
      "type": "SFOData.Attachment" 
      }, 
      "fileExtension": "jpeg", 
      "fileName": "hp-hero-img.jpeg", 
      "fileContent": "/9j/4AA" 
     }, 
     { 
      "__metadata": { 
      "uri": "https://apisalesdemo8.successfactors.com:443/odata/v2/Attachment(1189L)", 
      "type": "SFOData.Attachment" 
      }, 
      "fileExtension": "jpeg", 
      "fileName": "hp-content-bkgd-img.jpeg", 
      "fileContent": "/9j/4AAQSk" 
     }]}}} 

私は配列を扱うチュートリアルの多くを見つけるのですかがありますが、私は非常に最初のトークン「D」ですでに失敗します。 とすべての "__metadata"トークンは必要ありません。

lastNameなどの属性とコレクションの添付ファイルを含むpojoを作成しました。 しかし、私のコードは常に任意のヒントをいただければ幸いトークン "d" または "__metadata"

public class ResponseDataObject { 


    private String lastName; 
    private String address; 
    private String cellPhone; 
    private String firstName; 
    private String city; 
    private String country; 
    private List<Attachment> attachments = new ArrayList<>(); 
    .....getters and setters 

とジャクソンリーダー

ObjectReader objectReader = 
    mapper.readerFor(ResponseDataObject.class); 
    ResponseDataObject dataObject = objectReader.readValue(file); 

で失敗します。

よろしく マティアスは

答えて

0

あなたがPOJOに存在しない、プロパティを無視する必要があります。

// for version 1.x  
mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
// for newer versions 
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) 

デシリアライズコード:ObjectMapperためDeserializationFeatureで次のプロパティを設定し

ObjectMapper mapper = new ObjectMapper(); 
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); 
ResponseDataObject dataObject = mapper.readValue(file, ResponseDataObject.class); 

とResponseDataObjectクラスにこの注釈を追加:あなたはプロパティを無視する@JsonIgnorePropertiesアノテーションを使用することができます

@JsonRootName(value = "d") 
class ResponseDataObject { 
+0

私はそれを試みましたが、すべての属性にNULL値が割り当てられているため、正しくマッピングされていないと思いますか? –

+0

jsonvalueを解析するために少し異なるコードを使用しています。コードを更新しました。試してみる。 –

+0

いいえ、すべてが最終的にnullです –

0

ことクラスに定義されているメンバーのいずれとも一致しません。例:

@JsonIgnoreProperties(ignoreUnknown = true) 
public class ResponseDataObject { 

これにより、一致するすべてのプロパティがマップされ、他のプロパティが無視されるようになります。

関連する問題