📜  实现异常处理-找不到404资源

📅  最后修改于: 2021-01-12 00:47:14             🧑  作者: Mango

实现异常处理-找不到404资源

在上一节中,我们在创建资源时返回了正确的响应状态CREATED。在本节中,我们将讨论当用户资源不存在时应该如何响应。

让我们尝试执行一个简单的响应。

步骤1:打开Rest客户端Postman并选择Get方法。

步骤2:点击“历史记录”标签,然后选择“获取请求”。

步骤3:输入URI http:// localhost:8080 / users / {id}。用户标识不应该存在。

步骤4:点击发送按钮。

我们得到状态:200 OK,并且空的主体是成功的响应,即使资源不存在。但是,当资源不存在时,这不是正确的响应。

让我们先修复它。

步骤1:打开UserResource.java文件。

步骤2:创建UserNotFoundException 。这是一个检查的异常。

@GetMapping("/users/{id}")
public User retriveUser(@PathVariable int id)
{
User user= service.findOne(id);
if(user==null)
//runtime exception
throw new UserNotFoundException("id: "+ id);
return user;
}

步骤3:创建UserNotFoundException类。

步骤4:从超类生成构造函数。

右键单击文件->源->从超类生成构造器…->检查RuntimeException(String)->生成。

UserNotFoundException.java

package com.javatpoint.server.main.user;
public class UserNotFoundException extends RuntimeException 
{
public UserNotFoundException(String message) 
{
super(message);
}
}

步骤5:像以前一样,打开Rest Client Postman并生成Get响应。它显示状态:500 Internal Server Error

但是对于未找到资源,状态:500内部服务器错误不是适当的响应。因此,我们将添加注释@ResponseStatus以生成状态:404未找到。

UserNotFoundException.java

package com.javatpoint.server.main.user;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
@ResponseStatus(HttpStatus.NOT_FOUND)
public class UserNotFoundException extends RuntimeException 
{
public UserNotFoundException(String message) 
{
super(message);
}
}

步骤6:再次移至Postman并生成Get请求。

我们得到正确的响应状态:当用户资源不存在时,找不到404。默认错误处理所提供的请求的主体,这就是为什么我们要返回此返回状态的原因。

Spring Boot和Spring Web MVC框架的结合提供了错误处理。 Spring Boot自动配置一些默认的异常处理。获得企业内部所有服务的一致异常消息非常重要。

如果我们有一个大型组织,并且每个服务都以不同的方式返回异常消息,那么那就不好了。如果我们定义一个标准异常结构,然后在所有RESTful服务中都遵循它,那将是很好的。