In meinem Java Spring-Projekt habe ich eine Zeichenfolge eines JSON-Arrays mit Objekten. Ich möchte Daten aus einer Zeichenfolge abrufen und dann in der Datenbank speichern.
Also habe ich: Pojo-Klasse
public class Contact {
private String id;
private String name;
private String mobile;
//getters and settrs & constructors
}
Und ich möchte Daten wie den folgenden Code abrufen:
String stringdata=["{"id":"1","mobile":"1860108","name":"Intex"}",
"{"id":"21","mobile":"777717717","name":"pari"}",
"{"id":"26","mobile":"172676236","name":"pari2"}"];
try {
Contact contact1 = new Contact();
try {
contact1 = new Gson().fromJson(contactreceive, Contact.class);
}
catch (UnsupportedEncodingException uee) {
return new ResponseEntity<Object>("failed", HttpStatus.EXPECTATION_FAILED);
}
Contact contact = new Contact(contact1.getId(),contact1.getName(),contact1.getMobile());
userDao.saveContact(contact);
return new ResponseEntity<Object>("created", HttpStatus.CREATED);
} catch (Exception e) {
logger.error("Mobile User Signup > Error: " + e.getMessage());
return new ResponseEntity<Object>(HttpStatus.NO_CONTENT);
}
}
Aber ich bekomme Fehler:
Anmeldung für mobile Benutzer & gt; Fehler: java.lang.IllegalStateException: BEGIN_OBJECT erwartet, aber BEGIN_ARRAY in Zeile 1, Spalte 2
Wie kann ich diese Kontakte abrufen, ohne das Array zu entfernen?
2 Antworten
Ihre JSON-Zeichenfolge beginnt und endet mit []
, sodass GSON
oder Jackson
oder ein anderer Parser ein Array analysiert. Um dies zu beheben, müssen Sie dies tun
List<Contact> contact1 = new ArrayList<>();
contact1 = new Gson().fromJson(contactreceive, Contact.class);
Contact contactObject = contact1.get(0);
Contact contact = new Contact(contactObject.getId(),contactObject.getName(),
contactObject.getMobile());
Der Inhalt enthält ein Array, während Sie eine einzelne Klasse erwarten. Sie müssen den Listentyp der Kontaktklasse übergeben, indem Sie beispielsweise das Dummy-Feld deklarieren und dessen Typ abrufen:
private static List<Contact> contactTypeField;
...
List<Contact> contacts = new Gson().fromJson(contactreceive,
MyClass.getDeclaredField("contactTypeField").getGenericType());
Verwandte Fragen
Neue Fragen
java
Java ist eine Programmiersprache auf hoher Ebene. Verwenden Sie dieses Tag, wenn Sie Probleme haben, die Sprache selbst zu verwenden oder zu verstehen. Dieses Tag wird selten alleine verwendet und wird am häufigsten in Verbindung mit [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] und [maven] verwendet.