Использую Retrofit для работы с Rest API.
Я знаю, что Gson содержит аннотации, с помощью которых можно вытягивать нужные нам данные из Json, но что если эти данные нужно предварительно обработать?
Например, мне нужно отформатировать дату, полученную из Json. Для этого в десериализаторе я использую вот такой код (
и это только для одного поля из 10):
dataValue.entrySet()?.forEach {
if (it.key == "date_created") {
Log.i(TAG, "date_created exists")
val dateStr: String = it.value.asString
val parsedDateFormat =
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX")
val parsedDate: Date = parsedDateFormat.parse(dateStr)
val dayDateFormat = SimpleDateFormat("dd")
val day = dayDateFormat.format(parsedDate)
val monthDateFormat = SimpleDateFormat("MMMM")
val month = monthDateFormat.format(parsedDate)
val yearDateFormat = SimpleDateFormat("yyyy")
val year = yearDateFormat.format(parsedDate)
dateCreated = "$month $day, $year"
}
В итоге код десериализатора получается достаточно громоздким и сложным для восприятия. Хочется от него избавиться и использовать аннотации. Но как их спользовать для решения подобных задач? На ум приходит создать дополнительные поля с lazy инициализацией, которые будут дергать необработанные поля и преобразовывать их в нужный формат, но тогда класс будет содержать много лишней информации и методов. Есть ли способы получше?