마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

android retrofit2 response 질문

0 추천

안녕하세요 android retrofit2 을 공부하는데 response 라는게 있던데

응답 값으로 retrofit2로 api 를 찌르면 나오는 값들을 response class를 만들어 사용하는건가요? 

 

그럼 이 값들을 알려면 서버쪽에서 어떤값들 나오는지 api 문서를 달라고 요청해야되는건가요? 

 

data class ImageSearchResponse (
    var documents:ArrayList<Document>,
    var meta:Meta
) {
    data class Document(
        var collection:String,
        var thumbnail_url:String,
        var image_url:String,
        var width:Int,
        var height:Int,
        var display_sitename:String,
        var doc_url:String,
        var datetime:String
    )
    data class Meta(
        var total_count:Int,
        var pageable_count:Int,
        var is_end:Boolean
    )
}
공과근성 (6,020 포인트) 님이 2021년 6월 18일 질문

1개의 답변

0 추천
 
채택된 답변

네. 맞습니다.

 

참고로 님의 예제에서 API의 응답값에는 데이터를 바꿀 수 없도록 final이나  immutable type을 사용하는게 일반적입니다.

data class ImageSearchResponse (
    @SerializedName("documents") val documents: List<Document>,
    @SerializedName("meta") val meta: Meta
)
    data class Document(
        @SerializedName("collection") val collection: String,
        @SerializedName("thumbnail_url") val thumbnailUrl: String,
        @SerializedName("image_url") val imageUrl: String,
        @SerializedName("width") val width: Int,
        @SerializedName("height") val height: Int,
        @SerializedName("display_sitename") val displaySiteName:String,
        @SerializedName("doc_url") val docUrl: String,
        @SerializedName("datetime") val datetime: String
    )
    data class Meta(
        @SerializedName("total_count") val totalCount: Int,
        @SerializedName("pageable_count") val pageableCount: Int,
        @SerializedName("is_end") val isEnd: Boolean
    )

var 대신 val,  ArrayList대신 List를 사용하는게 더 좋습니다. 그리고 Gson의 경우 @SearializedName을 사용하면 API 응답 필드명과 클래스 프로퍼티 명을 다르게 줄 수 있습니다.

그리고 안드로이드 스튜디오 플러그인에서 JSON 을 검색하셔서 하나 설치하시면 JSON을 코틀린 데이터 클래스로 만들어주는 작업을 대신할 수 있습니다.

spark (228,010 포인트) 님이 2021년 6월 18일 답변
공과근성님이 2021년 6월 18일 채택됨
...