Обработка исключений в Micronaut

Есть ли способ в micronaut создать исключение, которое будет указывать код ошибки для ответа, так же, как мы можем сделать это в springboot:

throw new ResponseStatusException(HttpStatus.FORBIDDEN)

или нам всегда нужно реализовывать собственный обработчик исключений?

Я бы предпочел не реализовывать обработчики исключений только для того, чтобы иметь возможность возвращать ответ 400 или 403.


person Lucas Andrade    schedule 09.03.2021    source источник
comment
Вы используете библиотеку Micronaut Security?   -  person Jeff Scott Brown    schedule 09.03.2021
comment
Если ваш контроллер возвращает HttpResponse, вы можете просто вернуть HttpResponse 403. Но рекомендуется иметь обработчик для конкретной обработки исключений.   -  person Anorgar    schedule 09.03.2021
comment
@JeffScottBrown нет, еще не использую библиотеку безопасности. только делаю первые шаги, чтобы понять, как это работает.   -  person Lucas Andrade    schedule 10.03.2021
comment
@Anorgar Я поэкспериментирую с этим, спасибо.   -  person Lucas Andrade    schedule 10.03.2021
comment
Не совсем понятно, в каком контексте вы хотите это сделать. https://docs.micronaut.io/2.4.0/api/io/micronaut/http/exceptions/HttpStatusException.html может иметь значение.   -  person Jeff Scott Brown    schedule 10.03.2021
comment
@JeffScottBrown да, именно так, спасибо   -  person Lucas Andrade    schedule 16.03.2021
comment
В следующий раз ответьте на свои вопросы в разделе ответов. Я переместил ваш ответ в вики сообщества, чтобы другим было легче его найти.   -  person Makoto    schedule 16.03.2021
comment
В следующий раз ответьте на свои вопросы в разделе ответов. - Не думаю, что поступили правильно. У меня не было ответа. У меня есть вопрос и комментарий, которые могут иметь отношение к делу, в зависимости от ответа на заданный мной вопрос.   -  person Jeff Scott Brown    schedule 16.03.2021
comment
@JeffScottBrown: Это замечание было направлено не на вас.   -  person Makoto    schedule 16.03.2021
comment
@ Макото верно, спасибо! Я обязательно сделаю это в следующий раз   -  person Lucas Andrade    schedule 16.03.2021


Ответы (2)


Класс, который я хотел:

io.micronaut.http.exceptions.HttpStatusException

Сначала я не нашел, потому что мне не хватало зависимости:

implementation("io.micronaut:micronaut-http")

Я использую его, чтобы успешно вернуть ошибку 404 с сообщением в этом примере:

fun findById(id: Long): User {
    val user = userRepository.findById(id)
    return if (user.isPresent()) user.get() else throw HttpStatusException(HttpStatus.NOT_FOUND, "User not found")
}

Не стесняйтесь комментировать, если это достойный код котлина. Я новичок в kotlin, из фона java и scala. Мне прилично смотрится xD

person Community    schedule 16.03.2021

Всего один трюк: если вы хотите избежать оператора return, вы можете обновить свой метод, чтобы использовать полные возможности котлина.

Что-то вроде этого:

fun findById(id: Long): User = 
    userRepository.findById(id)
        ?.let { it.orElseThrow(HttpStatusException(HttpStatus.NOT_FOUND, "User not found"))}

Это использование оператора безопасного вызова и метода преобразования let, которые получают вашу сущность или генерируют исключение, если ее не нашли.

person rflpazini    schedule 01.04.2021