У меня есть класс данных, в котором есть поле 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
Пользовательский сериализатор Джексона не работает в варианте сборки выпуска ⇐ Android
Форум для тех, кто программирует под Android
1729697001
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 { *; }
Подробнее здесь: [url]https://stackoverflow.com/questions/79118605/jackson-custom-serializer-not-working-in-release-build-variant[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия