Пользовательский сериализатор Джексона не работает в варианте сборки выпускаAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Пользовательский сериализатор Джексона не работает в варианте сборки выпуска

Сообщение Anonymous »

У меня есть класс данных, в котором есть поле Uri:
data class MyDataClass(
@JsonSerialize(using = JacksonUriSerializer::class)
@JsonDeserialize(using = JacksonUriDeserializer::class)
@param:JsonProperty(value = "uri")
@get:JsonProperty(value = "uri")
val uri: Uri
)

И следующий пользовательский сериализатор/десериализатор:
import android.net.Uri
import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.databind.JsonSerializer
import com.fasterxml.jackson.databind.SerializerProvider

class JacksonUriSerializer : JsonSerializer() {

override fun serialize(
value: Uri,
jsonGenerator: JsonGenerator,
serializerProvider: SerializerProvider?
) {
jsonGenerator.writeString(value.toString())
}
}

import android.net.Uri
import androidx.core.net.toUri
import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.databind.DeserializationContext
import com.fasterxml.jackson.databind.JsonDeserializer

class JacksonUriDeserializer : JsonDeserializer() {

override fun deserialize(
jsonParser: JsonParser,
deserializationContext: DeserializationContext?
): Uri {
return jsonParser.valueAsString.toUri()
}
}

Сериализация/десериализация работает нормально, когда приложение работает в варианте отладочной сборки. Но когда я запускаю его в варианте сборки выпуска, выдается следующее исключение:
Document nesting depth (1001) exceeds the maximum allowed (1000, from `StreamWriteConstraints.getMaxNestingDepth()`) (through reference chain...
->android.net.Uri$StringUri["canonicalUri"]
->android.net.Uri$HierarchicalUri["canonicalUri"]
->android.net.Uri$HierarchicalUri["canonicalUri"]
->...

Я использую версию 2.17.2 Джексона, и мои текущие правила защиты для Джексона:
-dontwarn com.fasterxml.jackson.core.type.TypeReference
-keep class * extends com.fasterxml.jackson.core.type.TypeReference {
();
}


Примечание:

1 — я пытался добавить аннотацию @Keep в пользовательский сериализатор/десериализатор (это не дало эффекта)

2 - Я пытался добавить следующие правила proguard, но безрезультатно:
-keep class * extends com.fasterxml.jackson.databind.JsonSerializer { *; }
-keep class * extends com.fasterxml.jackson.databind.JsonDeserializer { *; }


Подробнее здесь: https://stackoverflow.com/questions/791 ... ld-variant
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»