在上一部分中, 我们在创建资源时返回了正确的响应状态CREATED。在本节中, 我们将讨论当用户资源不存在时应该如何响应。
让我们尝试执行一个简单的响应。
步骤1:打开Rest客户端Postman并选择Get方法。
步骤2:点击“历史记录”标签, 然后选择“获取请求”。
步骤3:输入URI http:// localhost:8080 / users / {id}。用户标识不应该存在。
步骤4:点击“发送”按钮。
文章图片
我们得到状态:200正常并且为空, 这是成功的响应, 即使该资源不存在。但是, 当资源不存在时, 这不是正确的响应。
让我们先修复它。
步骤1:打开UserResource.java文件。
步骤2:创建一个UserNotFoundException。这是一个检查的异常。
@GetMapping("/users/{id}")public User retriveUser(@PathVariable int id){User user= service.findOne(id);
if(user==null)//runtime exceptionthrow new UserNotFoundException("id: "+ id);
return user;
}
步骤3:创建UserNotFoundException类。
【实现异常处理-找不到404资源】步骤4:从超类生成构造函数。
右键单击文件-> 源-> 从超类生成构造函数… -> 检查RuntimeException(String)-> 生成。
文章图片
UserNotFoundException.java
package com.srcmini.server.main.user;
public class UserNotFoundException extends RuntimeException {public UserNotFoundException(String message) {super(message);
}}
步骤5:像以前一样, 打开Rest Client Postman并生成一个Get响应。它显示状态:500 Internal Server Error。
文章图片
但是状态:500 Internal Server Error不是对找不到资源的适当响应。因此, 我们将添加注释@ResponseStatus以生成状态:404未找到。
UserNotFoundException.java
package com.srcmini.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服务中都遵循它, 那将是很好的。
推荐阅读
- Android传递中文参数方法(之一)
- 使用Spring Security实现基本身份验证
- JAX-WS教程介绍
- RESTful Web服务
- JAX-WS示例RPC样式
- JAX-WS示例文档样式
- RESTful JAX-RS文件上传示例
- RESTful JAX-RS文件下载示例
- RESTful JAX-RS注释示例