이전에 쓴 글을 요약해서 말하면
Moshi의 Adapter를 이용하여 네트워크 요청 결과를 최종적으로 리턴 받기 전에
중간에서 원하는 객체로 바꾸는 내용에 대해 언급한적이 있습니다.
이전 글 막바지에 제가
객체 A를 Adapter를 이용하여 객체B로 바꾸지만 그 내용중에서 한 두개를
바꾸는 건데 비효율적이라고 언급한 내용이 있습니다.
그에 대한 내용입니다.
Moshi에서 @JsonQualifier
를 이용하여 수정이 가능합니다
파싱 전체를 바꾸는 것이 아니라 개중 몇개만 수정하고 싶으신 경우라면
@JsonQualifier
를 사용하는것이 훨씬 더 좋아보입니다.
방법은 아래와 같습니다.(공식 문서에도 있습니다)
@JsonQualifier
를 이용하여 필드에 적용할 커스텀 Annotation을 만듭니다@Retention(AnnotationRetention.RUNTIME)
@JsonQualifier
annotation class HasWarning {
아무것도 안쓰시면 됩니다.
}
@JsonClass(generateAdapter = true)
@Entity(tableName = Const.TABLE_CRYPTO_CURRENCY, primaryKeys = [Const.COLUMN_TICKER])
data class CryptoCurrency(
...
@Json(name = Const.JSON_UPBIT_MARKET_WARNING)
@ColumnInfo(name = Const.COLUMN_HAS_WARNING)
@HasWarning
val hasWarning: Boolean
)
class CryptoCurrencyAdapter {
@FromJson
@HasWarning
fun fromJson(hasWarning: String): Boolean {
return hasWarning == Const.UPBIT_WARNING
}
@ToJson
fun toJson(@HasWarning hasWarning: Boolean): String {
return if(hasWarning) Const.UPBIT_WARNING else Const.UPBIT_NONE
}
}
주의하실점은 `@FromJson, @ToJson을 다 정의를 해주셔야 합니다.