Поле даты API возвращает java.time.format.DateTimeParseException: текст не может быть проанализирован

У меня есть конечная точка API с полем даты и времени, и я не могу правильно ее проанализировать. API написан на С#, и я не нахожу особой помощи в том, как это решить:

kotlinx.datetime.DateTimeFormatException: java.time.format.DateTimeParseException: Text '2022-05-02T16:12:52.393538-04:00' could not be parsed, unparsed text found at index 26 at kotlinx.datetime.LocalDateTime$Companion.parse(LocalDateTime.kt:57) at kotlinx.datetime.serializers.LocalDateTimeIso8601Serializer.deserialize(LocalDateTimeSerializers.kt:19) at kotlinx.datetime.serializers.LocalDateTimeIso8601Serializer.deserialize(LocalDateTimeSerializers.kt:13) at kotlinx.serialization.json.internal.PolymorphicKt.decodeSerializableValuePolymorphic(Polymorphic.kt:59) at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableValue(StreamingJsonDecoder.kt:36) at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableValue(AbstractDecoder.kt:43) at kotlinx.serialization.encoding.AbstractDecoder.decodeNullableSerializableElement(AbstractDecoder.kt:79) at com.demo.app.http.response.users.UserAccessTokenResponse$$serializer.deserialize(UserAccessTokenResponse.kt:7) at com.demo.app.http.response.users.UserAccessTokenResponse$$serializer.deserialize(UserAccessTokenResponse.kt:7) at kotlinx.serialization.json.internal.PolymorphicKt.decodeSerializableValuePolymorphic(Polymorphic.kt:59) at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableValue(StreamingJsonDecoder.kt:36) at kotlinx.serialization.json.Json.decodeFromString(Json.kt:100) at io.ktor.serialization.kotlinx.KotlinxSerializationConverter.deserialize(KotlinxSerializationConverter.kt:55) at io.ktor.client.plugins.contentnegotiation.ContentNegotiation$Plugin$install$2.invokeSuspend(ContentNegotiation.kt:135) at io.ktor.client.plugins.contentnegotiation.ContentNegotiation$Plugin$install$2.invoke(Unknown Source:13) at io.ktor.client.plugins.contentnegotiation.ContentNegotiation$Plugin$install$2.invoke(Unknown Source:6) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:123) at io.ktor.util.pipeline.SuspendFunctionGun.proceed(SuspendFunctionGun.kt:81) at io.ktor.client.HttpClient$4.invokeSuspend(HttpClient.kt:170) at io.ktor.client.HttpClient$4.invoke(Unknown Source:11) at io.ktor.client.HttpClient$4.invoke(Unknown Source:6) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:123) at io.ktor.util.pipeline.SuspendFunctionGun.proceed(SuspendFunctionGun.kt:81) at io.ktor.util.pipeline.SuspendFunctionGun.proceedWith(SuspendFunctionGun.kt:91) at io.ktor.client.plugins.HttpCallValidator$Companion$install$2.invokeSuspend(HttpCallValidator.kt:140) at io.ktor.client.plugins.HttpCallValidator$Companion$install$2.invoke(Unknown Source:13) at io.ktor.client.plugins.HttpCallValidator$Companion$install$2.invoke(Unknown Source:6) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:123) at io.ktor.util.pipeline.SuspendFunctionGun.proceed(SuspendFunctionGun.kt:81) at io.ktor.util.pipeline.SuspendFunctionGun.execute$ktor_utils(SuspendFunctionGun.kt:101) at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:77) at io.ktor.client.call.HttpClientCall.body(HttpClientCall.kt:87) at com.demo.app.http.TokenHttpClient.getToken(TokenHttpClient.kt:144) at com.demo.app.http.TokenHttpClient$getToken$1.invokeSuspend(Unknown Source:15) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:138) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:112) at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:14) at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:62) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:138) at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:112)

Я не нашел многого в этом для kotlinx.serialization, и для меня это серьезная остановка.

вот как выглядит мой объект ответа:

@Serializable
data class UserAccessTokenResponse(
    @SerialName("http_code")
    val httpCode: Int = 200,
    @SerialName("error_response")
    val errorResponse: String? = null,
    @SerialName("access_token")
    val accessToken: String? = null,
    @SerialName("token_type")
    val tokenType: String? = null,
    @SerialName("expires_in")
    val expiresIn: Int = 0,
    @SerialName("refresh_token")
    val refreshToken: String? = null,
    @SerialName("date_created")
    val dateCreated: LocalDateTime? = null,
    @SerialName("was_refreshed")
    val wasRefresh: Boolean = false
)

Мои предложения: make val dateCreated: LocalDateTime? = null, как val dateCreated: String? = null и преобразуйте дату и время в соответствии с вашими требованиями, используя SimpleDateFormat.

Sandesh KhutalSaheb 03.05.2022 10:32

Я нашел лучшее решение, спасибо за ваше предложение

Eman 03.05.2022 17:09
0
2
25
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, проблема в том, что я использую неправильный тип. Читая kotlinx-datetime документ, кажется, что они рекомендуют вам использовать Instant, а затем конвертировать в LocalDateTime, когда вам действительно нужно использовать его в своем коде.

Другие вопросы по теме