[TIL] Android - java.io.EOFException: End of input at line 1 column 1 path $ 대응

2024. 1. 4. 12:22· Today I Learn
반응형

아래와 같이 api 호출 인터페이스를 구성하여 서버와의 통신을 시도했는데, EOFException이 발생했다.

interface TestApi {
    @PUT("/api/test")
    fun update(
        @HeaderMap headers: HashMap<String, String>,
        @Body request: BodyRequest
    ): Call<NormalResponse>
}
java.io.EOFException: End of input at line 1 column 1 path  

통신 후, Response를 반환하는데 Empty Response를 반환하고 있었다.
하지만 내가 작업하면서 NormalResponse Type으로 반환되도록 구성하면서 발생하는 것이 원인이었다.


이 경우 2가지 해결 방법이 존재했다.

1. NormalResponse가 아니라 Unit으로 반환하기

): Call<Unit>

즉, 아무것도 반환하지 않는 것이나 마찬가지다. 

 

2. nullOnEmptyConverterFactory 추가하기

private val nullOnEmptyConverterFactory = object : Converter.Factory() {
    fun converterFactory() = this
    override fun responseBodyConverter(
        type: Type,
        annotations: Array<out Annotation>,
        retrofit: Retrofit
    ) = object : Converter<ResponseBody, Any?> {
        val nextResponseBodyConverter =
            retrofit.nextResponseBodyConverter<Any?>(converterFactory(), type, annotations)
        override fun convert(value: ResponseBody) =
            if (value.contentLength() != 0L) nextResponseBodyConverter.convert(value) else null
    }
}

반환된 response data의 length가 0이면 자동으로 null을 반환하도록 처리해 주는 converter다.

 

이제 구현한 converter를 Retrofit에 add한다.

return Retrofit.Builder()
    .baseUrl(url)
    .client(getClient())
    .addConverterFactory(GsonConverterFactory.create())
    .addConverterFactory(nullOnEmptyConverterFactory)
    .build()
    .create(apiClass)


물론 해당 converter를 사용하게 되면 api 구성 로직에서 null 처리에 대해 별도로 추가를 해주어야 한다.

 

반응형
저작자표시
'Today I Learn' 카테고리의 다른 글
  • [TIL] - Android Compose에서 Context 사용하기
  • [TIL] 두 개의 리스트 묶어서 Map으로 변환하기 - zip(), toMap()
  • [TIL] Kotlin - flatten() Method
  • [TIL] Android Device Id, Name, OsVersion 정보 확인하기
SeungYong.Lee
SeungYong.Lee
반응형
SeungYong.Lee
Win-Dev
SeungYong.Lee
전체
오늘
어제
  • All (220) N
    • Development (122) N
      • Android (118) N
      • iOS (0)
      • Flutter (4)
      • Backend (0)
    • Algorithm (5)
    • Knowledge (3)
      • IT (1)
      • Science (0)
      • ETC & Tip (2)
    • Today I Learn (28)
    • Coding Test (62)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 안녕하세요. 반갑습니다 :)

인기 글

태그

  • 코틀린
  • HTTP
  • exception
  • Animation
  • hilt
  • Android
  • coroutine
  • Flutter
  • Collection
  • Retrofit
  • dfs
  • DI
  • 비동기처리
  • Imageview
  • 프로그래머스
  • Widget
  • Kotlin
  • compose
  • Java
  • 코딩테스트

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
SeungYong.Lee
[TIL] Android - java.io.EOFException: End of input at line 1 column 1 path $ 대응
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.