есть еще некоторые похожие темы, но я думаю, что это другая ситуация.
Я пытаюсь десериализовать строку даты из JSON:
'2017-09-1114:28:42 '(без Z) * 1006 *
В моем файле Json свойство имеет тип java.util.Date и помечено:
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss", timezone = "Europe/Berlin")
Хотя яполучая эту ошибку:
com.fasterxml.jackson.databind.exc.InvalidFormatException: Невозможно десериализовать значение типа java.util.Date из строки "2017-09-11 14:28:42": недопустимое представление (ошибка: не удалось выполнить синтаксический анализ значения даты '2017-09-11 14:28:42': невозможно проанализировать дату "2017-09-11 14: 28: 42Z": пока формат не соответствует формату 'yyyy-MM-dd'T'HH: mm: ss.SSS'Z '', синтаксический анализ не выполняется (снисходительность? null))
Какого черта это делает "2017-09-11 14: 28: 42Z "моей исходной строки" 2017-09-11 14:28:42 ".Почему это добавляет это 'Z'?В других потоках решение состояло в том, чтобы использовать @JsonFormat или удалить этот 'Z' из строки.Что ж, я все еще использую @JsonFormat, и изначально в строке нет 'Z'.
При запросе ресурса у почтальона я получаю это значение для соответствующего свойства:
"deviceStatusSince": "2017-09-11 14:28:42",
Любая помощь будет благодарна.
Редактировать # 1 Full StackTrace:
E/ASYNCTASKLOADDEVICEFROM: Deserialization of response failed! response: [{"id":4,"deviceId":"abc123def","deviceName":"mymachinename","deviceType":"mymachinetype","deviceStatus":1,"deviceStatusSince":"2017-09-11 14:28:42","location":"somewhere","created":"2019-01-24 19:25:11","updated":"2019-01-24 19:25:11","lamport_timestamp":3},{"id":5,"deviceId":"abc123def","deviceName":"mymachinename","deviceType":"mymachinetype","deviceStatus":1,"deviceStatusSince":"2017-09-11 14:28:42","location":"somewhere","created":"2019-01-24 20:10:29","updated":"2019-01-24 20:10:29","lamport_timestamp":3}]
com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not deserialize value of type java.util.Date from String "2017-09-11 14:28:42": not a valid representation (error: Failed to parse Date value '2017-09-11 14:28:42': Can not parse date "2017-09-11 14:28:42Z": while it seems to fit format 'yyyy-MM-dd'T'HH:mm:ss.SSS'Z'', parsing fails (leniency? null))
at [Source: (String)"[{"id":4,"deviceId":"5123b85f316a9_01","deviceName":"Maschine #123","deviceType":"mymachinetype","deviceStatus":1,"deviceStatusSince":"2017-09-11 14:28:42","location":"somewhere","created":"2019-01-24 19:25:11","updated":"2019-01-24 19:25:11","lamport_timestamp":3},{"id":5,"deviceId":"abc123def","deviceName":"mymachinename","deviceType":"mymachinetype","deviceStatus":1,"deviceStatusSince":"2017-09-11 14:28:42","location":"somewhere","created":"2019-01-24 20:10:29","updated":"[truncated 45 chars]; line: 1, column: 135] (through reference chain: java.util.ArrayList[0]->my.project.models.json.DeviceJson["deviceStatusSince"])
at com.fasterxml.jackson.databind.DeserializationContext.weirdStringException(DeserializationContext.java:1504)
at com.fasterxml.jackson.databind.DeserializationContext.handleWeirdStringValue(DeserializationContext.java:910)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseDate(StdDeserializer.java:513)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseDate(StdDeserializer.java:466)
at com.fasterxml.jackson.databind.deser.std.DateDeserializers$DateBasedDeserializer._parseDate(DateDeserializers.java:195)
at com.fasterxml.jackson.databind.deser.std.DateDeserializers$DateDeserializer.deserialize(DateDeserializers.java:285)
at com.fasterxml.jackson.databind.deser.std.DateDeserializers$DateDeserializer.deserialize(DateDeserializers.java:268)
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:127)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:287)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:151)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:285)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:244)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:27)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3999)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2999)
at my.project.remote.async.AsyncTaskLoadDevicesFromServer.onPostExecute(AsyncTaskLoadDevicesFromServer.java:147)
at my.project.remote.async.AsyncTaskLoadDevicesFromServer.onPostExecute(AsyncTaskLoadDevicesFromServer.java:46)
at android.os.AsyncTask.finish(AsyncTask.java:695)
at android.os.AsyncTask.access$600(AsyncTask.java:180)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:712)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
E/ASYNCTASKLOADDEVICEFROM: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Редактировать # 2: при установке свойства в null это работает.Но я хочу заметить, что созданные и обновленные свойства настраиваются аналогично (@JsonAnnotation, тот же шаблон, та же строка).Что там отличается, что я не вижу?
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss", timezone = "Europe/Berlin") private Date created;
Редактировать # 3: Этот ответ раньше десериализовывался через objectMapper.readValue:
[{"id":8,"deviceId":"abc123def","deviceName":"mymachine","deviceType":"mymachinetype","deviceStatus":1,"deviceStatusSince":"2017-09-10 13:37:42","location":"somewhere","created":"2019-01-26 01:09:06","updated":"2019-01-26 01:09:06","lamport_timestamp":3}]