2016-08-20 1 views
1

Wenn wir eine POJO-Klasse haben, können wir sie mit einigen eingehenden JSONs verknüpfen. Ich kämpfe darum, einen Weg zu finden, nach dem ich einfach nur den ganzen json-Wert haben kann.Wie bekomme ich JSON-Daten in der Jersey-REST-Implementierung?

Für z.

{ 
    "macro_tasks": [ 
     { 
      "id": "cc5cee68-c1e5-4396-987b-c68559399186", 
      "label": "consi-1", 
      "name": "Consi 1", 
      "project_id": "82d1e463-1bb1-42d3-9adc-9e0d5848d139", 
      "creator_id": null, 
      "created_at": null, 
      "updated_at": null, 
      "meta_data": { 
       "key1": "value1", 
       "key2": 321 
      } 
     } 
    ] 
} 

Hier meta_data ist von JSON-Typ, die ihre Werte ändern innen halten können. Also kann ich es nicht mit einer POJO-Klasse abbilden.

public class MacroTask { 

    private UUID id; 
    private String label; 
    private String name; 

    private UUID projectId; 

    private UUID creatorId; 

    private String createdAt; 

    private String updatedAt; 

    private <some data type> meta_data; 

//getter and setter 

Gibt es eine Möglichkeit Ebene JSON-Daten zu bekommen und es in Code zu verwenden und Dump in DB [wir PostgreSQL verwenden, die jsonb Typen unterstützt.]

Antwort

1

Ich löste es von Generic JSON-Typ verwendet wird, Jackson JsonNode. Es hat einige Nachteile, wie ich gehört habe, aber ich versuche es. Bis jetzt funktioniert es wie erwartet. Ich werde aktualisieren, wenn ich irgendwelche Herausforderungen habe oder eine bessere Lösung finde.

-1

Warum nicht meta_data als Feld vom Typ verwenden string anstelle von array? Dann könnten Sie die JSON-Ebene als String hinzufügen und diesen Wert in Ihrem Backend verwenden.

//add json as string value to this field  
private String meta_data; 
+0

Ich bekomme Fehler wie folgt 'Kann nicht deserialize Instanz von java.lang.String aus START_OBJECT Token um [Quelle: org.glassfish.jersey.me[email protected]75ccff03; Zeile: 7, Spalte: 45] (über die Referenzkette: in.playment.internal.api.dto.MicroTaskDTO ["micro_task"] -> in.play.internal.api.dto.bean.MicroTask ["meta_data"]) ' – theGamblerRises

+0

Ich muss den Code sehen, der diese Ausnahme verursacht. – MKorsch

0

Sie können Karte verwenden; wie

private Map<String, Object> meta_data; 
Verwandte Themen