我正在尝试创建一个自定义异常“ 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));
}
感谢您的帮助。
答案 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
private Long id;
public UserNotFoundException(Long id) {
super();
this.id = id;
}
// Getters
为什么将消息转换为字符串时失败:检查与未检查的异常
请记住,Exception
是一个已检查的异常,它要求您进行显式处理-否则,它将在编译时失败。
您可能想研究RuntimeException
来设置未经检查的异常。
有关RuntimeException
和Exception
的更多详细信息,请参见以下内容:
Difference between java.lang.RuntimeException and java.lang.Exception
有关类似的问题和解答,请参见以下内容,它们可以为您指明正确的方向: