java - 返回客户异常对象时更改 responseStatusCode
问题描述
我使用 Spring Boot 构建了一个 rest API,当使用xxEntity
我创建的类发生异常时返回一个自定义 ResponseEntity
public class xxEntity<T> {
private T body;
private HttpStatus status;
private int statusCode;
private xxException error;
public xxEntity(T body) {
this.body = body;
status = HttpStatus.OK;
this.statusCode = status.value();
}
public xxEntity(HttpStatus status, xxException error) {
this.status = status;
this.statusCode = status.value();
this.error = error;
}
}
当出现异常时,我将实体返回如下:
return new xxEntity<>(HttpStatus.NOT_FOUND, new xxException(ex));
包含法语消息、英语消息和内部错误代码ex
的 json在哪里。String
String
int
它返回具有以下详细信息的自定义对象:
{
"body": null,
"status": "NOT_FOUND",
"statusCode": 404,
"error": {
"userMessage": {
"en": "No user found",
"fr": "Pas d'utilisateur trouvé",
"errorCode": 10
}
}
}
直到一切正常,唯一的问题是我只能返回状态码200 OK
我实际上想根据发生的事件返回不同的状态码,以便在前端可以轻松地将其作为异常处理,而无需编写多个 if..else 条件
示例:实际上在我附加的 json 中,状态代码是 404 NOT FOUND 但是当在邮递员中发出请求时,我收到 200 OK
解决方案
HttpStatus 代码作为响应对象的一部分返回。你可能需要做这样的事情->
ResponseEntity.status(HttpStatus.NOT_FOUND).body();
请参阅开源项目- response-builder,它是构造自定义 api 响应和异常处理的包装器 -> https://github.com/AccessGateLabs/response-builder
推荐阅读
- python - 如何在 Beautifulsoup 中刮取与标题文本对应的 td
- python - 为什么半硬式在线学习预测 MNIST 需要 256 个输出?
- c# - 如何使用代码将 Crystal Report 连接到 SQL Server
- laravel - Laravel 安排一次性活动
- python - Scrapy 用户代理被阻止或在远程服务器上不起作用
- pine-script - 您将如何修改此 Tradingview Pine 脚本以使最后一个(当前)实时柱像其他柱一样被打印
- python - 使用字符串评估矩阵以获得特征值
- haskell - 为什么与`Ambiguous type..`错误(在ghci中)有如此不同的行为?
- java - (Java) Telegram Bot API EditMessage 响应:[400] 错误请求:无法编辑消息
- android - Parse 无法删除我想要的对象