try -catch 를 이용해서 보통 에러를 확인하고 사용을 하는데 이것을 사용하고 싶지 않을때가 있습니다.
restApi 에서 exception에 대한것이 길게 나오는게 싫을때 사용하고 싶은데요.
저는 이럴때 사용하고 적용을 해보았습니다.
@InlineOnly
@SinceKotlin("1.3")
public inline fun <T, R> T.runCatching(block: T.() -> R): Result<R> {
return try {
Result.success(block())
} catch (e: Throwable) {
Result.failure(e)
}
}
위의 runCatchin 을 보면 성공과 실패에 대해서 Result 값을 주는 것을 알 수 있습니다.
재밌게 한번 적용을 해보았는데요.
val result = runCatching {
commonService.setViewCnt(params)
}
val (respStatus, httpStatus) = when {
result.isSuccess -> {
GlobalRespStatus.OK to HttpStatus.OK
}
result.exceptionOrNull() is DuplicateKeyException -> {
GlobalRespStatus.SQL_DUPLICATE_EXCEPTION to HttpStatus.CONFLICT
}
else -> {
GlobalRespStatus.SERVER_EXCEPTION to HttpStatus.INTERNAL_SERVER_ERROR
}
}
val rtnMap: MutableMap<String, Any> = BaseResp(
request,
globalRespStatus = respStatus
)
val json = objectMapper.writeValueAsString(rtnMap)
ResponseEntity.status(httpStatus).body(json)
runCatching에서 나오는 result를 이용해서 분기처리를 해서 사용을 해보았습니다.
이렇게 하니 exception 이 나오는 그런 문제가 발생하지 않더라구요.
오늘도 Kotlin과 친해질려는 주인장 코린이였습니다.
Jackson 에서 시간이 이상하게 나오는 현상 해결법 (1) | 2024.01.09 |
---|---|
[Kotlin]Lift return out of if 란 무엇인가? (0) | 2023.11.21 |
[Kotlin] firstOrNull 에 대한 정리 (1) | 2023.10.26 |
[Kotlin] mutableListOf 함수에 대한 예제 (0) | 2023.10.25 |
[Kotlin] 엘비스 연산자 (Elvis Operation) (0) | 2023.08.31 |