일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Functional Programming
- 추상 팩토리
- F
- Observer Pattern
- Design Pattern
- 팩토리 메소드
- 싱글톤
- 옵저버 패턴
- ㅋㅁ
- Kotlin
- builderPattern
- ㅓ
- 코틀린
- 디자인패턴
- factory method
- 함수형프로그래밍
- El
- Abstract Factory
- 디자인패턴 #
- r
- PrototypePattern
- designPattern
- a
- 빌터패턴
- 프로토타입 패턴
- 추상팩토리패턴
- Singleton
- Today
- Total
오늘도 더 나은 코드를 작성하였습니까?
Ktor Response validation 본문
기본적으로 Ktor는 status code에 따라 응답의 유효성을 검사하지 않습니다.
- expectSuccess을 이용하여, 2xx가 아닌 응답에 대한 예외를 발생시킨다.
- 2xx 응답에 대한 더 엄격한 유효성 검사를 추가한다.
- 2xx가 아닌 응답의 유효성 검사를 사용자 지정.
Enable default validation
Ktor를 사용하면 expectSuccess 속성을 true로 설정하여 기본 유효성 검사를 활성화할 수 있습니다.
클라이언트 구성 수준에서 수행할 수 있습니다
import io.ktor.client.*
import io.ktor.client.engine.cio.*
val client = HttpClient(CIO) {
expectSuccess = true
}
2xx가 아닌 오류 응답에 대해 다음 예외가 발생
3xx 응답에 대한 RedirectResponseException
4xx 응답에 대한 ClientRequestException
5xx 응답에 대한 ServerResponseException
Custom validation
2xx 응답에 대한 유효성 검사를 추가,
HttpCallValidator 플러그인을 사용하여 기본 유효성 검사를 사용자 지정할 수 있습니다.
HttpCallValidator를 설치하려면 클라이언트 구성 블록 내에서 HttpResponseValidator 함수 이용한다.
val client = HttpClient(CIO) {
HttpResponseValidator {
// ...
}
}
Validate 2xx responses
default 유효성 검사는 2xx가 아닌 오류 응답에 대해 예외를 throw합니다.
더 엄격한 유효성 검사를 추가하고 2xx 응답을 확인해야 하는 경우 HttpCallValidator에서 사용할 수 있는 validateResponse 함수를 사용합니다.
예에서 클라이언트는 JSON 형식의 오류 세부 정보가 포함된 2xx 응답을 수신합니다. validateResponse는 CustomResponseException을 발생시키는 데 사용됩니다.
val client = HttpClient(CIO) {
install(ContentNegotiation) { json() }
HttpResponseValidator {
validateResponse { response ->
val error: Error = response.body()
if (error.code != 0) {
throw CustomResponseException(response, "Code: ${error.code},
message: ${error.message}")
}
}
}
}
Handle non-2xx exceptions
기본 유효성 검사를 사용자 지정하고 2xx가 아닌 응답에 대한 예외를 특정 방식으로 처리해야 하는 경우 handleResponseExceptionWithRequest를 사용합니다.
예에서 클라이언트는 기본 ClientRequestException 대신 404 응답에 대해 사용자 지정 MissingPageException을 발생시킵니다.
val client = HttpClient(CIO) {
expectSuccess = true
HttpResponseValidator {
handleResponseExceptionWithRequest { exception, request ->
val clientException =
exception as? ClientRequestException ?: return@handleResponseExceptionWithRequest
val exceptionResponse = exception.response
if (exceptionResponse.status == HttpStatusCode.NotFound) {
val exceptionResponseText = exceptionResponse.bodyAsText()
throw MissingPageException(exceptionResponse, exceptionResponseText)
}
}
}
}
'Ktor > Client' 카테고리의 다른 글
Ktor Retrying failed requests (0) | 2022.07.19 |
---|---|
Ktor User agent (0) | 2022.07.19 |
Ktor requests (0) | 2022.07.19 |
ktor(client Engines) (0) | 2022.07.15 |
Ktor(client) (0) | 2022.07.15 |