2017-06-01 1 views
0

Ich möchte überprüfen, ob meine Daten Nullwert haben. Die Daten im JSON-Format ist unten:Nullwert und leere Zeichenfolge in verschachtelten Daten (Java) finden

"{ 

    "totalAmount" : 20000, 
    "items" : [ 
    { 
     "id" : "9fd91eaf-2b9a-4bae-9692-4222f85e868", 
     "name" : "X hotel", 
     "itemType" : 0, 
     "orderCount" : 2, 
     "amount" : 5000 
    }, 
    { 
     "id" : "9fd91eaf-2b9a-4bae-9692-4222f85e869", 
     "name": "Special Dinner", 
     "itemType" : 1, 
     "orderCount" : 1, 
     "amount" : 10000 
    } 
    ] 
}" 

Und hier ist meine Prüflogik.

class NullCheck { 
    public checkNull (Itinerary itinerary) 
     Object nu = null; 
    if (itinerary == null) { 
     return true; 
    } else if (itinerary.getTotalAmount() == null || itinerary.getItems() == null) { 
     return true; 
    } else if (itinerary.getItems().contains(null)) { 
     return true; 
    } else if (itinerary.getItems().stream().flatMap // 
      (item -> Arrays.stream(item.getClass().getDeclaredFields())) 
      .map(field -> { field.setAccessible(true); return field.get(nu) == null; })) { 
     return true; 
    } 
} 

ist jedoch IlligalAccessException bei field.get (nu) geworfen, und ich kann nicht herausfinden, warum mein Code nicht gut funktioniert. Wie ich Java-Dokument lese, scheint es in der Syntax korrekt. Kann ich fragen, welcher Teil meines Codes fehlgeschlagen ist? weiter, einige der JSON Format Daten werden in Objekt vom Typ String konvertiert, so muss ich auch überprüfen, ob die string ist leer string oder nicht. Gibt es einen einfachen Weg, es zu tun?

Antwort

1

Ich denke, es gibt 2 Fehler in Ihrem Code.

die erste:

if (itinerary.getItems().stream().flatMap // 
     (item -> Arrays.stream(item.getClass().getDeclaredFields())) 
     .map(field -> { field.setAccessible(true); return field.get(nu) == null; })) { 
    return true; 
} 

das Ergebnis .map Methode ist ein Stream<Boolean>, kein bool expression.So wird ein Syntaxfehler und nicht kompiliert werden.

Die zweite:

return field.get(nu) == null; 

dieser Code NullPointerException während die filed ist eine Instanz field.and die Methode get in Field kann einige Exception werfen, so sollte es versuchen Beifang werfen.

0
Object nu = null; 

Sie versuchen, 'nu' zu bekommen, was ein Null-Objekt ist. Das ist der Grund, warum Sie eine IlligalAccessException erhalten.

1

Der doc für Field.get

Gibt den Wert des Feldes dieses Feld vertreten, auf dem angegebenen Objekt. Der Wert wird automatisch in ein Objekt eingeschlossen, wenn es einen primitiven Typ hat.

Sehen Sie, wie es auf dem angegebenen Objekt heißt? Das liegt daran, dass das Field-Objekt keinem bestimmten Objekt mehr zugeordnet ist.

was bedeutet, dass Field.get Betrieb müssen die item Objekt übergeben werden, nicht die null zugewiesen nu Objekt Sie gerade vorbei.

Dies scheint wirklich langweilig, versuchen Sie, eine Bibliothek wie this für JSON-Schema-Validierung zu verwenden.

Verwandte Themen