Moshi @JsonQualifier를 이용하여 특정 필드만 바꾸기
이전에 쓴 글을 요약해서 말하면
Moshi의 Adapter를 이용하여 네트워크 요청 결과를 최종적으로 리턴 받기 전에
중간에서 원하는 객체로 바꾸는 내용에 대해 언급한적이 있습니다.
이전 글 막바지에 제가
객체 A를 Adapter를 이용하여 객체B로 바꾸지만 그 내용중에서 한 두개를
바꾸는 건데 비효율적이라고 언급한 내용이 있습니다.
그에 대한 내용입니다.
Moshi에서 @JsonQualifier
를 이용하여 수정이 가능합니다
파싱 전체를 바꾸는 것이 아니라 개중 몇개만 수정하고 싶으신 경우라면
@JsonQualifier
를 사용하는것이 훨씬 더 좋아보입니다.
방법은 아래와 같습니다.(공식 문서에도 있습니다)
@JsonQualifier
를 이용하여 필드에 적용할 커스텀 Annotation을 만듭니다- 필드에 커스텀 Annotation을 달아준 다음
- Adapter를 만들어 무엇이 어떻게 바뀔지를 정한다음
- Moshi에 추가하면 간단하게 적용이 가능합니다.
Custom Annotation
@Retention(AnnotationRetention.RUNTIME)
@JsonQualifier
annotation class HasWarning {
아무것도 안쓰시면 됩니다.
}
필드에 커스텀 Annotation 적용
@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
)
Adapter를 만들어 무엇이 어떤거로 바뀔지 정의
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을 다 정의를 해주셔야 합니다.
Author And Source
이 문제에 관하여(Moshi @JsonQualifier를 이용하여 특정 필드만 바꾸기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kingjinho/Moshi-JsonQualifier를-이용하여-특정-필드만-바꾸기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)