📅  最后修改于: 2021-01-12 00:48:12             🧑  作者: Mango
如前所述,我们应该定义所有RESTful服务都遵循的标准异常结构。在本节中,我们将讨论所有资源的通用异常处理的实现。
让我们看看如何自定义异常消息。
步骤1:创建一个名为com.javatpoint.server.main.exception的新包。
步骤2:在上述包中,创建一个名称为ExceptionResponse的类。
步骤3:在基本级别上,异常结构有三项关键要素:时间戳,消息和详细信息。定义这三个字段。
步骤4:使用字段生成构造函数。
步骤5:生成Getter,不需要Setter。
定义结构后,我们可以为其定义Java实现。每当发生异常时,我们都将以特定格式返回响应。结构是最重要的部分,必须与语言无关。
Spring Framework中重要的类之一是ResponseEntityExceptionHandler类。它是异常的抽象基类,可在所有不同的异常处理程序方法之间提供集中式异常处理。我们将扩展此类以处理并提供定制的异常处理功能。此异常处理功能作为HellowWorldController,UserResource(控制器)应用于所有控制器。
步骤6:在com.javatpoint.server.main.exception包中创建一个名为CustomizedResponseEntityExceptionHandler的新类,并扩展ResponseEntityExceptionHandler类。
步骤7:添加@ControllerAdvice和@RestController批注。
步骤8:在包资源管理器中展开Maven依赖关系->展开spring-webmvc-5.1.9.RELEASE.jar->展开org.springframework.web.servlet.mvc.method.annotation->打开ResponseEntityExceptionHandler.class 。
步骤9:从ResponseEntityExceptionHandler.class复制ResponseEntityMethod 方法,然后粘贴到CustomizedResponseEntityExceptionHandler.java文件中。
步骤10:重写ResponseEntityMethod方法。将方法名称重命名为handleAllExceptions()。
步骤11:创建异常响应结构。
步骤12:创建一个ResponseEntity对象,并将异常响应和Http状态作为参数传递。
CustomizedResponseEntityExceptionHandler.java
package com.javatpoint.server.main;
import java.util.Date;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
import com.javatpoint.server.main.exception.ExceptionResponse;
//defining exception handling for all the exceptions
@ControllerAdvice
@RestController
public class CustomizedResponseEntityExceptionHandler extends ResponseEntityExceptionHandler
{
@ExceptionHandler(Exception.class)
//override method of ResponseEntityExceptionHandler class
public final ResponseEntity
步骤13:打开rest客户Postman并发送Get请求。我们得到状态:500内部服务器错误和我们定义的异常结构。
如果我们要将“内部服务器错误”状态自定义为,则需要在CustomizedResponseEntityExceptionHandler.java文件中进行一些更改。
CustomizedResponseEntityExceptionHandler.java
package com.javatpoint.server.main;
import java.util.Date;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
import com.javatpoint.server.main.exception.ExceptionResponse;
import com.javatpoint.server.main.user.UserNotFoundException;
//defining exception handling for all the exceptions
@ControllerAdvice
@RestController
public class CustomizedResponseEntityExceptionHandler extends ResponseEntityExceptionHandler
{
@ExceptionHandler(Exception.class)
//override method of ResponseEntityExceptionHandler class
public final ResponseEntity
再次移至Postman并发送Get请求。我们得到状态:404 Not Found,带有定义的异常结构。