处理自定义异常

时间:2018-09-28 21:21:19

标签: java exception exception-handling

我正在尝试创建一个自定义异常“ 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 :(得分:4)

您正在尝试调用不存在的父构造函数。

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));
}

如果您打算利用ExceptionHandler

,还可以为UserNotFoundException定制字段。
private Long id;
public UserNotFoundException(Long id) {
    super();
    this.id = id;
}

// Getters

为什么将消息转换为字符串时失败:检查与未检查的异常 请记住,Exception是一个已检查的异常,它要求您进行显式处理-否则,它将在编译时失败。

您可能想研究RuntimeException来设置未经检查的异常。

有关RuntimeExceptionException的更多详细信息,请参见以下内容:

Difference between java.lang.RuntimeException and java.lang.Exception

有关类似的问题和解答,请参见以下内容,它们可以为您指明正确的方向:

How can I write custom Exceptions?