Response header `ContentType: text/html; charset=utf-8`
Request header `Accept: application/json`
안드로이드에서 Ktor를 사용하다가 보면 마주칠 수 있는 문제다.
보통 원인은 아래의 둘 중 하나이다.
1. Response 타입 불일치
클라이언트가 서버에게 특정 형식의 응답(ex. application/json)을 기대하고 있지만, 서버는 'text/html; charset=utf-8' 형식으로 응답하는 경우
2. Converter의 부재
현재 Ktor Client 설정에 "text/html" 형식의 응답을 처리할 수 있는 컨텐츠 컨버터(Content Converter)가 없는 경우
이 경우, HTML 형식을 처리할 수 없어 NoTransformationFoundException 오류가 발생할 수 있다.
본인은 Gson을 사용중이라 의외로 간단하게 해결했다.
install(ContentNegotiation) {
register(ContentType.Text.Html, GsonConverter(GsonBuilder().create()))
gson()
}
위 코드 스니펫처럼 Html에 대응되는 컨버터를 별도로 추가해 줬다.
만약 Gson이 아닌 kotlinx.serialization을 사용한다면
install(ContentNegotiation) {
json(contentType = ContentType.Any, json = Json {
// 아래와 같은 kotlinx.serialization 구성 추가
// isLenient = true
// ignoreUnknownKeys = true
})
}
이렇게 해주면 된다.
Ref.
'Android > Troubleshooting' 카테고리의 다른 글
사용 중인 네트워크의 타입 파악하기 (0) | 2024.01.15 |
---|---|
안드로이드 인터넷 연결상태 체크: HttpURLConnection 객체 이용 (1) | 2024.01.06 |
[최신 이슈] kotlinx.serialization, plugin is not applied to the module오류 (ft. IDE 1.9.10) (1) | 2024.01.04 |
ROOM DB 마이그레이션 오류 개선 (1) | 2023.12.18 |
BuildConfig가 생성 또는 import가 안될 때 (1) | 2023.12.15 |