In meinem Java-Projekt gibt es eine GSO-Deserializer-Funktion, die den folgenden Fehler ergibt.java.lang.NumberFormatException: Für Eingabezeichenfolge: "2017-01-28 13:28:20"
java.lang.NumberFormatException: For input string: "2017-01-28 13:28:20"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Long.parseLong(Long.java:589)
at java.lang.Long.parseLong(Long.java:631)
at com.google.gson.JsonPrimitive.getAsLong(JsonPrimitive.java:238)
at com.example.myproject.controller.MyController$1.deserialize(MyController.java:222)
at com.example.myproject.controller.MyController$1.deserialize(MyController.java:1)
at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:58)
at com.google.gson.internal.bind.TypeAdapters$22$1.read(TypeAdapters.java:526)
at com.google.gson.internal.bind.TypeAdapters$22$1.read(TypeAdapters.java:524)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:93)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:172)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:81)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:60)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:93)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:172)
at com.google.gson.Gson.fromJson(Gson.java:803)
at com.google.gson.Gson.fromJson(Gson.java:768)
at com.google.gson.Gson.fromJson(Gson.java:717)
at com.google.gson.Gson.fromJson(Gson.java:689)
Ich erhalte diesen Fehler, wenn ich die folgende JSON-Zeichenfolge deserialize.
jsonString = {"repList":[{"createdOn":"2017-01-28 13:28:20","date":"2016-11-17 00:00:00","description":"","id":45,"userId":10}],"subList":[{"attachmentCount":0,"dateOn":"2017-01-28 13:28:20","id":86,"screenId":1,"sync":"1","repId":45,"userId":10}]}
Unten ist meine Funktion, wo ich die Gson Deserialisierung getan habe.
SimpleDateFormat dtf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Locale.ENGLISH);
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
@Override
public Date deserialize(JsonElement json, Type type, JsonDeserializationContext deserializationContext) throws JsonParseException {
String frStr = dtf.format(new Date(json.getAsJsonPrimitive().getAsLong()));
dtf.setTimeZone(TimeZone.getDefault());
Date retDate =null;
try {
retDate = dtf.parse(frStr);
} catch (ParseException e) {
e.printStackTrace();
}
return retDate;
}
});
gson = builder.create();
MainAccounts mainAcc = gson.fromJson(jsonString, MainAccounts.class);
Was ich die Ausnahme bemerkt kommt, wenn ich das json primitiv zu lange konvertieren, wie unter
json.getAsJsonPrimitive().getAsLong()
innerhalb des deserialize method.How kann ich dieses Problem lösen? Bitte helfen Sie mir.
ok.its arbeitet jetzt.Also die oben genannten JSON Zeichenfolge kommt mit Datum Werte sind Entspricht der Zeitzone von Dubai, jetzt muss ich seine Zeitzone in Server umwandeln (das ist in Indien), also ändert sich der Datumswert in die indische Zeit. Wie kann ich das zusammen mit dem Format machen? – KJEjava48
@ KJEjava48 was beim Parsen wichtig ist, ist die Eingabe-Zeitzone, da 'java.util.Date' zeitzonenunabhängig ist (es ist tatsächlich ein Zeitstempel in UTC), bitte [this] (http://stackoverflow.com/questions/) 1516213/is-java-util-date-using-timezone) für weitere Details. Siehe auch http://stackoverflow.com/questions/7670355/convert-date-time-for-given-timezone-java –
AFAIR, 'SimpleDateFormat' ist nicht Thread-sicher. –