Optional - for handling nullable context
А другие типы есть для хендлинга другого контекста.
Mono, Flux, CompletableFuture, Deffered, (JavaScript's Promise) - for handling async context.
Result, Either - to handle success or failure contexts. Used to represent success or failure without using exceptions,
.....
но чтобы его триггернуть, тогда надо делать типо:
return when (val result = userService.findUser(id)) {
is Result.Success -> result.value
is Result.Error -> throw DomainException(result.error)
}
ну то есть допустим я поглотил Resultом некий ResourceNotFoundException и хочу записать в логи стэктрейс и вернуть ошибку клиенту через @RestControllerAdvice
Читать полностью…То есть все бизнес исключения мы типизируем, а все, что не обрабатываем оставляем как непредвиденные исключения?
Читать полностью…Просто раз котлин используется, то лучше typed errors использовать для ошибок в бизнес-логике.
Кода получится столько же как на эксепшенах, но получаем явность в компайл тайме
https://arrow-kt.io/learn/typed-errors/working-with-typed-errors
А эксепшены оставляются на случай действительной беды как вот системная ошибка
я боялся, что на такое там мне не ответят, так как это не гуглится очевидным образом, думал, здесь с таким сталкивались
Читать полностью…В случае typed errors ошибки обрабатываются по-хорошему не в @RestControllerAdvice,
а в своем компоненте, который инжектишь в контроллеры.
Никакого стактрейса
И все
в этом случае думаю стоит оставлять выкидывание эксепшенов и обработку в @RestControllerAdvice
Читать полностью…