Обработка пользовательских исключений - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь создать пользовательское исключение «UserNotFoundException», которое будет выдано, когда поступит GET-запрос для несуществующего пользователя.

class UserNotFoundException extends Exception {

    public UserNotFoundException(Long id) {
        super(id);
    }
}

Я знаю, что super (id) победилне работает, но я понятия не имею, как справиться с этой проблемой.Здесь выдается исключение:

@GetMapping("/users/{id}")
    User one(@PathVariable Long id) {

        return repository.findById(id)
            .orElseThrow(() -> new UserNotFoundException(id));
    }

Спасибо за помощь.

1 Ответ

0 голосов
/ 29 сентября 2018

Вы пытаетесь вызвать родительский конструктор, который не существует.

class UserNotFoundException extends Exception {

    public UserNotFoundException(Long id) {
        super(id);
    }

}

Класс Exception предоставляет следующие конструкторы:

public Exception()
public Exception(String message)
public Exception(String message, Throwable cause)
public Exception(Throwable cause)
protected Exception(String message, Throwable cause,
                    boolean enableSuppression,
                    boolean writableStackTrace)

Если вы хотитечтобы увидеть сообщение с id, вам придется преобразовать Long в String.

public UserNotFoundException(Long id) {
    super(String.valueOf(id));
}

У вас также есть возможность иметь настраиваемые поля для исключения UserNotFoundException, если вы намереваетесьпри использовании ExceptionHandler

private Long id;
public UserNotFoundException(Long id) {
    super();
    this.id = id;
}

// Getters

Почему происходит сбой при преобразовании сообщения в строку: Проверено против Непроверенных исключений Имейте в виду, что Exception является проверенным исключением, которое требует от васиметь явную обработку для - в противном случае, это не будет выполнено во время компиляции.

Возможно, вы захотите заглянуть в RuntimeException, чтобы настроить непроверенное исключение.

Подробнее об этом см. в следующем.RuntimeException против Exception:

Разница между java.lang.RuntimeException и java.lang.Exception

Подобные вопросы и ответы приведены ниже.роInt вы в правильном направлении:

Как я могу написать пользовательские исключения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...