处理自定义异常

Handling a custom exception

我正在尝试创建一个自定义异常 "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));
    }

感谢您的帮助。

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

class UserNotFoundException extends Exception {

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

}

Exception class 提供了以下构造函数:

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?