异常的 Http 状态代码

新手上路,请多包涵

我有一个 SpringBoot 控制器,我想为异常返回正确的 http 代码状态。所以,我的问题是:对于异常“500”或“409”,哪个 http 状态代码更好?

这是我的代码:

 @PostMapping(value = {"", "/"})
public ResponseEntity<Response> create(@RequestBody StudioDto studioDto,
        ServletRequest servletRequest, ServletResponse servletResponse) {

    Response response = new Response();

    try {
        studioService.createStudio(studioDto);
        response.setMessage("The studio was create");
        response.setStatusCode(HttpServletResponse.SC_CREATED);

    } catch (Exception e) {
        response.setMessage("Op we have a little problem");
        response.setErrorMessage(e.getMessage());

        //Which one
        //this one 5xx
        response.setStatusCode(500);
        //Or this one 4xx
        response.setStatusCode(409);
    }

    return new ResponseEntity(response, response.getHttpStatus());
}

原文由 Carlos Mario 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 608
2 个回答

这不是处理异常的推荐方法,您应该使用控制器建议,检查此 链接

状态代码由特定场景定义,500 表示内部服务器错误,我将用于未指定原因的问题,对于 409,它类似于目标资源上的冲突

由于与目标资源的当前状态冲突,请求无法完成。此代码用于用户可能能够解决冲突并重新提交请求的情况

您还有许多其他适用于不同情况的状态代码,所以我想说没有特定的状态代码是正确的答案,您可以查看此 链接 以获取更多信息

原文由 Amer Qarabsa 发布,翻译遵循 CC BY-SA 3.0 许可协议

托德给出了一个很好的链接。这是一种更好的思考方式:

https://httpstatuses.com/

  • 1×× 信息性

  • 2××成功

  • 3×× 重定向

  • 4×× Client Error * 400 Bad Request * 401 Unauthorized … * 405 Method Not Allowed …

  • 5×× 服务器错误 * 500 Internal Server Error * 501 Not Implemented * 502 Bad Gateway …

换句话说,每个主要数字(200、400、500 等)都是一个 CATEGORY 。您可以通过在“类别”中选择特定错误来“优化”错误代码。

对于您的原始问题:

  • 如果 _客户端请求_“错误”(例如,非法用户名/密码),则返回 4xx。

  • 如果 服务器 因某种原因失败(例如,您无法读取数据库),则返回 5xx。

HTTP 错误代码的“官方”列表是 RFC 7231:

https://www.rfc-editor.org/rfc/rfc7231

原文由 paulsm4 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题