如何把自定义异常类转换为JSON格式
当我们在开发中使用自定义异常类时,有时候我们需要将异常信息以JSON格式返回给客户端。这种情况下,我们可以通过一些简单的步骤来实现这个功能。下面我将详细介绍如何把自定义异常类转换为JSON格式。
步骤一:创建自定义异常类
首先,我们需要创建一个自定义异常类。这个异常类应该继承自Exception
或者RuntimeException
。在自定义异常类中,我们可以定义一些属性来存储异常信息,例如错误码、错误信息等。
public class MyCustomException extends RuntimeException {
private String errorCode;
private String errorMessage;
public MyCustomException(String errorCode, String errorMessage) {
this.errorCode = errorCode;
this.errorMessage = errorMessage;
}
public String getErrorCode() {
return errorCode;
}
public String getErrorMessage() {
return errorMessage;
}
}
步骤二:创建异常处理器
接下来,我们需要创建一个异常处理器类来将异常转换为JSON格式的响应。这个类应该实现ErrorController
接口,并且使用@RestControllerAdvice
注解进行标记。
@RestControllerAdvice
public class CustomExceptionHandler implements ErrorController {
@ExceptionHandler(MyCustomException.class)
public ResponseEntity<ErrorResponse> handleCustomException(MyCustomException ex) {
ErrorResponse errorResponse = new ErrorResponse(ex.getErrorCode(), ex.getErrorMessage());
return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
}
@Override
public String getErrorPath() {
return null;
}
}
在这个异常处理器类中,我们使用@ExceptionHandler
注解来指定要捕获的异常类。然后,我们创建一个ErrorResponse
对象,并将异常信息设置到该对象中。最后,我们使用ResponseEntity
来包装ErrorResponse
对象,并设置响应的HTTP状态码。
步骤三:创建响应实体类
我们需要创建一个响应实体类ErrorResponse
,用于封装异常信息。这个类应该包含错误码和错误信息两个属性。
public class ErrorResponse {
private String errorCode;
private String errorMessage;
public ErrorResponse(String errorCode, String errorMessage) {
this.errorCode = errorCode;
this.errorMessage = errorMessage;
}
public String getErrorCode() {
return errorCode;
}
public String getErrorMessage() {
return errorMessage;
}
}
步骤四:测试异常转换
现在我们可以测试一下异常转换是否正常工作。在我们的控制器中,抛出一个自定义异常,并通过测试请求来触发异常处理器的调用。
@RestController
public class MyController {
@GetMapping("/test")
public void testException() {
throw new MyCustomException("E001", "自定义异常测试");
}
}
现在,当我们向/test
发送请求时,会返回一个JSON格式的响应,包含自定义异常的错误码和错误信息。
{
"errorCode": "E001",
"errorMessage": "自定义异常测试"
}
这就是如何把自定义异常类转换为JSON格式的方法。通过这种方式,我们可以将异常信息以更加友好和标准的格式返回给客户端,提高了系统的可维护性和易用性。