Android/Troubleshooting
Ktor text/html content-type 반환으로 인한 문제 해결
몰름보반장
2024. 1. 4. 12:18
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.