2017-03-01 3 views
1

Ich implementiere eine REST-API und möchte prüfen, ob ein Schlüssel in der JSON-formatierten Anfrage existiert, die meine POST-Methode durchlaufen hat.Überprüfen, ob der JSON-Schlüssel in der REST-Methode existiert

Ich bin auf der Suche nach etwas in Richtung jsonobject.haskey Art der Methode. Bis jetzt bin ich auf Jackson und json-einfache Bibliotheken gestoßen, aber viele der Informationen über sie scheinen überholt zu sein und ich habe eine schwere Zeit, um zu navigieren.

Mein Ziel ist es, eine JSON-formatierte POST-Anfrage aufzunehmen, um eine Instanz einer Ressource zu erstellen. Abhängig vom Vorhandensein des Schlüssels im JSON-Objekt werden Werte über Setter zugewiesen.

Wenn Sie mich zu einer Bibliothek sowie eine API und einige Beispiele leiten können, wäre es sehr hilfreich.

{ 
    "id": 1, 
    "name": "A green door", 
    "price": 12.50, 
    "tags": ["home", "green"] 
} 

würde

{ 
    "id": 1, 
    "name": "A green door", 
    "price": 12.50, 
    "option":, 
    "tags": ["home", "green"] 
} 

weil JSON.hasOptionKey ausgefallen als

verarbeitet werden.

+0

Sie sollten eine Minimal, Complete, und prüfbare Beispiel HTTP-Post: //stackoverflow.com/help/mcve – freedev

Antwort

1

Der übliche Weg, dies zu tun, ist eine Art von Vertrag zwischen der JSON-Anfrage Payload und Domain-Objekte, offensichtlich können Sie die JSON mit einigen einfachen JSON Parsing-Bibliothek manuell analysieren, aber es ist fehleranfällig.

mit so etwas wie GSON, können Sie Ihre JSON-Struktur mit einem Java-Objekt und umgekehrt, zum Beispiel darstellen:

class X { 
    String id; 
    List<String> values; 
} 

wie etwas serialisiert werden: auch

können Sie dann Legen Sie die Optionen für die (De-) Serialisierung fest, damit der Parser weiß, wie mit Nullen umgegangen wird. Wenn z. B. id im Java-Objekt fehlt, lautet der JSON

{"values": ["1", "2", "3"]} 

UPDATE

Hier ist ein Beispiel für die Verwendung mit Gson (Importe und Getter/Setter der Kürze entfernt):

public class Question42529415 { 

    private static final Gson GSON = new GsonBuilder() 
      .setPrettyPrinting() 
      //.serializeNulls() 
      .create(); 

    private static Item fromPost(String postRequestJson) { 
     return GSON.fromJson(postRequestJson, Item.class); 
    } 

    private static String toClient(Item item) { 
     return GSON.toJson(item); 
    } 

    public static void main(String[] args) { 
     String clientReq = "{\n" 
       + " \"id\": 1,\n" 
       + " \"name\": \"A green door\",\n" 
       + " \"price\": 12.50,\n" 
       + " \"tags\": [\"home\", \"green\"]\n" 
       + "}"; 

     Item item = fromPost(clientReq); 
     System.out.println(item.getName() + " " + item.getOption()); 

     item.setOption("modified option"); 
     String modified = toClient(item); 
     System.out.println(modified); 
    } 
} 

class Item { 
    private String id; 
    private String name; 
    private String option; 
    private double price; 
    private List<String> tags; 

    // getters and setters 
} 
+0

Können Sie mir sagen, ob unten Sinn ergibt? 1) setze die Post-Methode, um gson als Argument aufzunehmen, 2) Implementiere eine Serializer-Klasse und rufe sie innerhalb der POST-Methode auf, 3) setze innerhalb der Serialisator-Klasse Optionen für die Deserialisierung, um Nullen zu behandeln, 4) gebe das JSON-Objekt zurück konvertiert in string, die dann an meinen Dienst übergeben wird, um korrekte Werte in meinem Modell – viviboox3

+0

@ viviboox3 einzustellen, klingt richtig :) siehe mein Update mit einem Beispiel – epoch

+0

danke für Ihre Hilfe! – viviboox3

Verwandte Themen