处理自定义异常
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
以设置未经检查的异常。
有关 RuntimeException
与 Exception
的更多详细信息,请参阅以下内容:
Difference between java.lang.RuntimeException and java.lang.Exception
请参阅以下类似问题和可以为您指明正确方向的答案:
How can I write custom Exceptions?
我正在尝试创建一个自定义异常 "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
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
请参阅以下类似问题和可以为您指明正确方向的答案:
How can I write custom Exceptions?