首页 > 解决方案 > 返回客户异常对象时更改 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在哪里。StringStringint

它返回具有以下详细信息的自定义对象:

{
    "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

标签: javaspring-bootexceptionhttp-status-codes

解决方案


HttpStatus 代码作为响应对象的一部分返回。你可能需要做这样的事情->

ResponseEntity.status(HttpStatus.NOT_FOUND).body();

请参阅开源项目- response-builder,它是构造自定义 api 响应和异常处理的包装器 -> https://github.com/AccessGateLabs/response-builder


推荐阅读