在前面的章节中,当我们创建资源时,我们返回了 CREATED 状态的适当响应。在本节中,我们将讨论当用户资源不存在时应该返回的响应。

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

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

步骤 2: 点击 History 标签并选择 Get 请求。

步骤 3: 在 URI 中键入 http://localhost:8080/users/{id}。用户 ID 不应该存在。

步骤 4: 点击 Send 按钮。

restful-web-services-404-not-found.png

我们得到了 Status: 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: 从超类生成构造函数。

右键单击文件 -> Source -> Generate Constructors from Superclass... -> 选中 RuntimeException(String) -> 生成。

restful-web-services-404-not-found2.png

UserNotFoundException.java

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

步骤 5: 打开 REST 客户端 Postman 并生成一个和之前一样的 Get 响应。它会显示 Status: 500 Internal Server Error

restful-web-services-404-not-found3.png

但是 Status: 500 Internal Server Error 不是资源未找到的适当响应。所以,我们将添加一个 @ResponseStatus 注解来生成 Status: 404 Not Found

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 请求。

restful-web-services-404-not-found4.png

我们得到了适当的响应 Status: 404 Not Found,当用户资源不存在时。默认错误处理提供了请求的响应体,所以我们得到了这个返回状态。

restful-web-services-404-not-found5.png

Spring Boot 和 Spring Web MVC 框架的组合提供了错误处理。Spring Boot 自动配置了一些默认的异常处理。在企业中,拥有一致的异常消息对于所有服务都是重要的。

如果我们拥有一个大的组织,每个服务返回的异常消息都以不同的方式,这是不好的。如果我们定义一个所有 RESTful 服务都遵循的标准异常结构,那将是很好的。

标签: spring, Spring教程, Spring语言学习, Spring框架, Spring框架教程, Spring框架高级教程, spring boot, spring boot入门教程, spring boot学习教程, spring boot下载, spring boot框架入门, spring boot面试题, spring boot笔试题, spring boot学习指南, spring boot技术