Jackson Zuordnung zu POJO nicht Deserialisieren Instanz Instanz
Ich bin empfangen von Daten in einem Jackson-format und Lesen will es in ein POJO-ich definiert haben. Ich bin entweder schlecht Festlegung der POJO oder fehlen einige wichtige Schritt. Das Daten-format empfangen wird, ist in dem folgenden format:
{
streetSegment: [
{
distance: "0.04",
highway: "residential",
name: "Swift",
line: "-1.6720224 52.6251985,-1.6721061 52.6250432,-1.6721799, 52.6248908,-1.6721996 52.6247594",
wayId: "76473524"
},
{
distance: "0.05",
highway: "residential",
name: "Swift",
line: "-1.6721799 52.6248908,-1.6723374 52.6248669,-1.6732035 52.6249774,-1.6734643 52.6249894",
wayId: "76473523"
}
]
}
Ich habe die POJO als:
public class StreetSegment {
public static class Street {
private String distance;
private String highway;
private String name;
private String line;
private String wayId;
public Street() {
super();
}
public String getDistance() {
return distance;
}
public void setDistance(String distance) {
this.distance = distance;
}
public String getHighway() {
return highway;
}
public void setHighway(String highway) {
this.highway = highway;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLine() {
return line;
}
public void setLine(String line) {
this.line = line;
}
public String getWayId() {
return wayId;
}
public void setWayId(String wayId) {
this.wayId = wayId;
}
}
}
Wenn ich die Objekt-mapper mit der folgenden Zeile:
List<StreetSegment> list = mObjectMapper.readValue( in, new TypeReference<List<StreetSegment>>(){} );
Bekomme ich eine Ausnahme, wie gezeigt:
10-18 12:49:57.596: W/System.err(31776): com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token
10-18 12:49:57.596: W/System.err(31776): at [Source: java.io.StringReader@42ea8038; line: 1, column: 1]
10-18 12:49:57.606: W/System.err(31776): at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:575)
10-18 12:49:57.616: W/System.err(31776): at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:569)
10-18 12:49:57.616: W/System.err(31776): at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.handleNonArray(CollectionDeserializer.java:259)
10-18 12:49:57.626: W/System.err(31776): at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:217)
10-18 12:49:57.626: W/System.err(31776): at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:207)
10-18 12:49:57.636: W/System.err(31776): at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:23)
10-18 12:49:57.636: W/System.err(31776): at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888)
10-18 12:49:57.646: W/System.err(31776): at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2041)
10-18 12:49:57.646: W/System.err(31776): at co.uk.dominion.test.MainActivity$19._getStreetSegmentFromURL(MainActivity.java:3428)
10-18 12:49:57.646: W/System.err(31776): at co.uk.dominion.test.MainActivity$19.doInBackground(MainActivity.java:3460)
10-18 12:49:57.656: W/System.err(31776): at co.uk.dominion.test.MainActivity$19.doInBackground(MainActivity.java:1)
10-18 12:49:57.656: W/System.err(31776): at android.os.AsyncTask$2.call(AsyncTask.java:287)
10-18 12:49:57.656: W/System.err(31776): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
10-18 12:49:57.656: W/System.err(31776): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
10-18 12:49:57.656: W/System.err(31776): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
10-18 12:49:57.656: W/System.err(31776): at java.lang.Thread.run(Thread.java:856)
Habe ich auch versucht zu definieren als JsonNode erst sehen, wenn ich konnte vor Ort das Problem, aber ohne Erfolg:
JsonNode node = mObjectReader.readValue(in);
List<StreetSegment> list = mObjectMapper.readValue(node.toString(), new TypeReference<List<StreetSegment>>(){});
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen
Street
auf diese Weise:Straße
StreetSegment
Prüfen, hier ist
main
:Überprüfung.
Ausgabe:
residential
StreetSegment
ist nicht das Kind der Straße. Ich benutze keinesuper()
InputStreamReader
Definieren Sie Ihre Modelle in zwei getrennte Klassen, nämlich
StreetSegment
undStreet
.und
//den rest überspringen, wenn Ihr problem gelöst ist
Ich nehme an, du bist mit
@RequestBody
für immer JSON Körper der Anfrage.Ich würde diese Art der Nutzung: