hoony's web study

728x90
반응형


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과 친해질려는 주인장 코린이였습니다. 

 

728x90

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading