2017-03-06 3 views
1

Mit Feder-data-Elasticsearch in Version 2.2.0 (+ Projekt lombok)SpringData Elasticsearch JSON Array zu Java Liste

ich eine JSON Antwort auf eine Java-Klasse deserialisieren möchten. Jedes Feld/Objekt außer einem JSON-Array funktioniert einwandfrei. Die Java-Liste "bs", die die B-Objekte aus dem JSON-Array enthalten soll, bleibt null.

Die JSON-Antwort mit dem Array wie folgt aussieht:

 ... 
     "_index": "someIndex", 
     "_type": "A", 
     "_id": "someId", 
     "_score": 0, 
     "_source": { 
      ... 
      "bs": [ 
       { 
       "number": "00000000", 
       "type": "03" 
       }, 
       { 
       "number": "4008123694567", 
       "type": "13" 
       } 
      ], 
      ... 
     } 
     ... 

Der JSON-Array "bs", um die Java-Liste bs deserialisiert werden soll. Die Java-Klasse A, das eine Liste von Bs enthält wie folgt aussieht:

@Data 
@Builder 
@AllArgsConstructor(suppressConstructorProperties = true) 
@NoArgsConstructor 
@Document(indexName = "#{AIndexType.getIndexName()}", type = "#{AIndexType.getTypeName()}") 
public class A implements Serializable { 
    ... 
    @Field(type = FieldType.Nested) 
    private List<B> bs; 
} 

Klasse B wie folgt aussieht:

@Data 
@AllArgsConstructor(suppressConstructorProperties = true) 
@NoArgsConstructor 
public class B implements Serializable { 

    private String number; 

    private String type; 
} 

Mit der @Field Annotation mit FieldType.NESTED nicht zu funktionieren scheinen/machen Sie einen Unterschied, es nicht zu benutzen. Muss ich einen benutzerdefinierten Deserializer (für die Liste bs) schreiben oder gibt es eine andere Möglichkeit, dies zum Laufen zu bringen?

+0

Könnten Sie den Ausgang oder Stacktrace gehören, wenn Sie die JSON-Array deserialisieren? – Adonis

+0

Danke für die Antwort. Das Problem ist gelöst, es gab eine Verbindung (/ falsche Verwendung von Eigenschaften) zu einer anderen elasticsearch-Instanz, die tatsächlich keine Instanzen von B. hatte –

Antwort

0

Siehe Kommentar oben.

das Problem gelöst ist, wird ein Link (/ falsche Verwendung von Eigenschaften) auf eine andere Instanz, die Elasticsearch hatte eigentlich keine Instanzen von B. gab es