멜팅비의 개발 공부

[Android/Kotlin] retrofit2 사용 시 Response가 XML인 경우 Convert 하는 방법 본문

개발 공부/[Android 개발]

[Android/Kotlin] retrofit2 사용 시 Response가 XML인 경우 Convert 하는 방법

멜팅비 2021. 9. 9. 23:14
반응형

요즘 안드로이드 사이드 프로젝트를 개인적으로 진행하고 있다.

현재 진행 중인 사이드 프로젝트에서 공공 데이터 API를 활용하여 데이터를 처리하는 기능이 있는데,

공공 데이터 API에서 지원하는 Response가 xml형태로 내려와서 xml로 내려온 결과를 변환하는 작업에 대한 내용을 정리하려고 한다.

 

XML Parser 라이브러리 종속성 추가

//xml parser

implementation 'com.tickaroo.tikxml:annotation:0.8.13' 
implementation 'com.tickaroo.tikxml:core:0.8.13' 
implementation 'com.tickaroo.tikxml:retrofit-converter:0.8.13' 
kapt 'com.tickaroo.tikxml:processor:0.8.13'

 

Retrofit Instance 생성 시 Converter등록

fun getRetrofitBuild(client: OkHttpClient) = Retrofit.Builder().run { 
	baseUrl(BASE_URL) 
	client(client) 
	addCallAdapterFactory(RxJava2CallAdapterFactory.create()) 
	// addConverterFactory(GsonConverterFactory.create(gson)) 
	addConverterFactory(TikXmlConverterFactory.create(TikXml.Builder().exceptionOnUnreadXml(false).build()))
	build() 
}

 

GsonConverterFactory.create() 대신 TikXmlConverterFactory.create(TikXml.Builder().exceptionOnUnreadXml(false).build())) 추가해 준다.

TikXml.Builder().exceptionOnUnreadXml(false).build()은 필요 없는 항목의 데이터를 제외하고 받고 싶을 때 사용한다.

 

결괏값 xml에 따른 dataClass 작성

<response>
<header>
<resultCode>00</resultCode>
<resultMsg>NORMAL SERVICE.</resultMsg>
</header>
<body>
<numOfRows>3</numOfRows>
<pageNo>1</pageNo>
<totalCount>1</totalCount>
<items>
<item>
<ITEM_SEQ>200402488</ITEM_SEQ>
<ITEM_NAME>알레기살정10밀리그람(페미로라스트칼륨)</ITEM_NAME>
... 생략

이러한 형식으로 내려올 경우

@Xml(name = "response")
data class PillInfo(
    @Element
    val header: Header,
    @Element
    val body: Body,
)

@Xml(name = "header")
data class Header(
    @PropertyElement
    val resultCode: Int,
    @PropertyElement
    val resultMsg: String,
)
...
생략

@Xml
data class Item(
    @PropertyElement(name = "ITEM_SEQ") var itemSeq: String?,
    @PropertyElement(name = "ITEM_NAME") var itemName: String?,
    ... 생략
)

어노테이션을 사용하여 data class를 생성하면 된다.

 

 

 


 

공공 데이터 API의 경우 

공공 데이터 포털에서 사용하고 싶은 데이터를 검색 후

오픈 API에서 사용할 API를 선택하면 된다.

API 문서를 파일로 받을 수 있으며, 활용 신청이 필요한 경우 활용 신청 후 서비스 키를  발급받아서 사용하면 된다.

 

반응형
Comments