【发布时间】:2020-09-26 09:47:02
【问题描述】:
我想创建自定义异常处理程序,它返回带有数据的结构化 JSON 响应。我试过这个:
@ExceptionHandler({ AccessDeniedException.class })
public ResponseEntity<ErrorResponseDTO> accessDeniedExceptionHandler(final AccessDeniedException ex) {
ErrorDetail errorDetail = ErrorDetail.NOT_FOUND;
LOG.error(ex.getMessage(), ex.getCause());
ErrorResponse errorEntry = new ErrorResponse();
.......
return new ResponseEntity<ErrorResponseDTO>(errorResponse, HttpStatus.FORBIDDEN);
}
完整代码:Github
但我得到了这个通用结果:
{
"timestamp": "2020-06-06T22:46:13.815+00:00",
"status": 403,
"error": "Forbidden",
"message": "",
"path": "/engine/users/request"
}
我只想得到这个结果:
{
"errors": [{
"status": 404,
"code": "1000",
"title": "Forbidden",
"detail": "Forbidden",
"extra": {
"detail": "Forbidden"
}
}]
}
您知道如何发送自定义结果以及如何解决此问题吗?
【问题讨论】:
-
在我的情况下,我想使用带有注释
@ExceptionHandler({ AccessDeniedException.class })的 Java 类,因为我想将值存储到 Enum 中。是否可以在我的处理程序中执行此操作? -
我非常怀疑
@ExceptionHandler是否可行。原因是,Spring 安全性对错误响应的处理方式不同,它永远不会出现在 ExceptionHandler 中,因为响应会在其他地方返回。 -
可能会在自定义 AccessDeniedHandler 实现中抛出异常,以便它涉及到 ExceptionHandler,但这不是处理响应的好方法。
-
你能给我举个例子吗?
标签: java spring spring-boot