2017-10-18 4 views
1

Ich habe einen sehr speziellen Anwendungsfall, in dem ich einige JSON-Daten von einer dritten Partei empfangen habe, die ich nicht ändern kann.Generische Java-Klassen erstellen, ohne JSON-Daten zu ändern

{  
    "Information": { 
     "mobile": { 
      "name": "Mobile Application", 
      "classType" : "A" 
     }, 
     "desktop": { 
      "name": "Desktop Application", 
      "classType" : "B" 
     }, 
     "tablet": { 
      "name": "Tablet Application", 
      "classType" : "A" 
     } 
    } 

} 

Als nächstes gibt es mehrere Komponenten, die diese Daten verwenden. Anstatt den gesamten JSON bereitzustellen, möchte ich diesen Komponenten Java-Objekte zur Verfügung stellen, mit denen einfacher zu arbeiten ist. Also erstelle ich JAVA-Objekte aus diesem JSON mit jsonschema2pojo tool.

Nun, das Problem ist, dass, wenn ich diese Bibliothek verwenden, erstellt es drei verschiedene Java-Dateien für mobile, Desktop und Tablet (und es ist richtig dabei), aber die Komponenten mit dieser Information würde eine generische Klasse lieber als wollen Handhabung anders für mobile Desktop und Tablet. Da auch mehr Geräte hinzugefügt werden können und es nur eine Menge Komponenten gibt, möchte ich keine bestimmten Klassen behalten. Ich wünschte, dass das 3P ein generisches "Gerät" zur Verfügung stellen würde, das einen Feldgerätetyp hätte, der mobile/Desktop- oder Tablet-Informationen speichern könnte, aber das wird eine Menge Zeit brauchen. In der Zwischenzeit, jede Lösung, die Sie sich vorstellen können?

+0

JSON-String zu Java-Objekt mit dynamischen Schlüsselnamen https://stackoverflow.com/questions/39159770/json-string-to-java-object -mit-dynamischem Schlüsselnamen – resource8218

Antwort

0

Erstellen Sie JSON-Schemas statt JSON, um Klassen zu generieren, und verwenden Sie "javaType", um eine generische Klasse zu generieren.

Überprüfen Sie das Schema der obigen JSON entsprechen:

{ 
    "type":"object", 
    "properties": { 
     "Information": { 
      "type": "object", 
      "properties": { 
       "mobile": { 
        "type": "object", 
        "javaType":"Devices", 
        "properties": { 
         "name" : { 
          "type": "string" 
         }, 
         "classType" : { 
          "type": "string" 
         } 
        } 
       }, 
       "tablet": { 
        "type": "object", 
        "javaType":"Devices", 
        "properties": { 
         "name" : { 
          "type": "string" 
         }, 
         "classType" : { 
          "type": "string" 
         } 
        } 
       }, 
       "desktop": { 
        "type": "object", 
        "javaType":"Devices", 
        "properties": { 
         "name" : { 
          "type": "string" 
         }, 
         "classType" : { 
          "type": "string" 
         } 
        } 
       } 

      } 
     }  
    } 
} 
Verwandte Themen